Отключить проверку сертификата в PHP SoapClient

Резюме:
Есть ли способ заставить встроенный SoapClient-класс в PHP подключаться через HTTPS к серверу с недопустимым сертификатом?

Почему я хочу это сделать?
Я развернул новое приложение на сервере, у которого пока нет записи DNS или сертификата. Я хочу попробовать подключиться к нему с помощью SoapClient перед настройкой записи DNS и исправлением сертификата, и наиболее разумным способом сделать это, похоже, является просто заставить клиента игнорировать сертификат во время тестирования.

Разве я не понимаю, что это огромный риск для безопасности?
Это только для тестирования. Когда услуга войдет в производство, будет действующий сертификат, и клиент будет вынужден его проверить.

Solutions Collecting From Web of "Отключить проверку сертификата в PHP SoapClient"

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 ]); 

Документация:

  • stream_context_create () Документы
  • Параметры контекста HTTP Документы
  • Параметры контекста SSL Документы

Принимаемый ответ работает, но только в режиме, отличном от WSDL . Если вы попытаетесь использовать это в режиме WSDL (т. Е. Передаете 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),