PHP SoapClient поверх самоподписанного сертификата, SOAP-ERROR: синтаксический анализ WSDL: невозможно загрузить из https: //

0

Я просмотрел сеть в течение трех дней, и я все еще не могу решить свою проблему... Вот почему я прошу вашей помощи :)

Я пытаюсь вызвать веб-службу через https с самонастраиваемым сертификатом, и я получаю следующую ошибку: SOAP-ERROR: Разбор WSDL: Не удалось загрузить с 'https://...

Мой код:

$streamContext = stream_context_create(array(
    'ssl' => array(
        'verify_peer' => false,
        'allow_self_signed' => true
     )
));
$client = new SoapClient("https://DOMAIN/ws.php?wsdl", array(
    'trace' => true,
    'stream_context' => $streamContext
));
$client->method($params);

Я попытался:

  • Изменить значения параметров "verify_peer" и "allow_self_signed";
  • Заменить ключ "ssl" на "https" в массиве stream_context;
  • Загрузите файл WSDL локально, но я получаю следующую ошибку: Не удалось подключиться к хосту (моя конечная точка: https://DOMAIN/ws.php);
  • Очистить кеш клиента;
  • Используйте библиотеку Zend_Soap_Client и nusoap.

Кроме того, я проверил соединение между клиентом и сервером со следующими командами "ping DOMAIN" и "telnet DOMAIN 443", и все в порядке.

Кажется, опция "stream_context" игнорируется или проблема в другом месте?! Это ошибка php?!

Все предложения будут оценены. Спасибо

  • 0
    Можете ли вы открыть DOMAIN / ws.php? Wsdl url с вашим браузером? Или WGET на сервере, где работает php? Ваш веб-сервер настроен правильно? Он должен не только прослушивать соединения через порт 443, но и иметь надлежащие настройки, касающиеся сертификата сервера и т. Д.
  • 0
    Привет, Грег, я могу открыть WSDL в своем браузере, когда обойду от безопасности (NET :: ERR_CERT_AUTHORITY_INVALID). Я могу загрузить WSDL с помощью команды wget на моем php-сервере только с этой опцией «no-check-certificate». К сожалению, у меня нет рук, чтобы установить или проверить настройки веб-сервера ...
Показать ещё 4 комментария
Теги:
soap
https
certificate
self-signed

1 ответ

1

У меня была очень похожая проблема, и я добавил 'verify_peer_name' => false в контекст потока. Так...

$streamContext = stream_context_create(array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
     )
));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню