Отключить проверку сертификатов в PHP SoapClient
резюме:
Есть ли способ заставить встроенный SoapClient-класс в PHP подключиться по HTTPS к серверу с недействительным сертификатом?
зачем мне это делать?
Я развернул новое приложение на сервере, который еще не имеет записи DNS или сертификата. Я хочу попробовать подключиться к нему с помощью SoapClient до настройка записи DNS и исправление сертификата, и наиболее разумный способ сделать это кажется чтобы просто заставить клиента игнорировать сертификат во время тестирования.
Не я понимаю, что это огромный риск для безопасности?
Это только для тестирования. Когда услуга будет запущена в производство, будет действительный сертификат на месте, и клиент будет вынужден проверить его.
3 ответов:
SoapClientпринимает контекст потока в его параметрах, которые вы можете создать сами. Таким образом, вы можете контролировать почти каждый аспект транспортного уровня:$context = stream_context_create([ 'ssl' => [ // set some SSL/TLS specific options 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ] ]); $client = new SoapClient(null, [ 'location' => 'https://...', 'uri' => '...', 'stream_context' => $context ]);документы:
принятый ответ работает, но только в non-WSDL режим. Если вы попытаетесь использовать это в WSDL mode (т. е. вы передаете url-адрес файла WSDL в качестве первого аргумента) вы столкнетесь с тем, что контекст потока игнорируется при загрузке файлов WSDL. Так что если файл WSDL также находится на сервере со сломанным сертификатом, он выйдет из строя, скорее всего, бросив сообщение
failed to load external entity. Смотрите подробнее здесь и здесь.Как предложил, самый простой способ-загрузить файл WSDL вручную и передать локальную копию в SoapClient. Вы можете скачать его, например, с
file_get_contentsиспользуя тот же контекст потока из принятого ответа.обратите внимание, что вам также придется сделать это при создании SoapServer.
правильный список для PHP 5.6.8 составляет
'ssl' => array('verify_peer_name'=>false, 'allow_self_signed' => true),
Comments