Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Принятый ответ работает, но только в режиме, отличном от WSDL. Если вы попытаетесь использовать это в режиме WSDL (например, вы передаете URL-адрес WSDL файла в качестве первого аргумента), вам придется столкнуться с тем, что при загрузке WSDL-потока игнорируется контекст потока. Поэтому, если файл WSDL также расположен на сервере со сломанным сертификатом, он будет терпеть неудачу, скорее всего, выбросит сообщение failed to load external entity. Подробнее здесь и здесь.

Как и было предложено, самый простой способ - загрузить файл WSDL вручную и передать локальную копию в SoapClient. Вы можете загрузить его, например, с помощью file_get_contents, используя тот же контекст потока из принятого ответа.

Обратите внимание, что вам также понадобится сделать это при создании SoapServer.

Ответ 3

Правильный список для PHP 5.6.8 -

'ssl' = > array ('verify_peer_name' = > false, 'allow_self_signed' = > true),