Клиент PHP SOAP с сертификатами через SSL

Я пытаюсь настроить клиента Soap со следующим кодом:

<?php $wsdl = 'https://domain.com/?wsdl'; $endpoint = 'https://domain.com'; $certificate = dirname(__FILE__) . '/CertWithKey.pem'; $password = 'pwd'; $options = array( 'location' => $endpoint, 'keep_alive' => true, 'trace' => true, 'local_cert' => $certificate, 'passphrase' => $password, 'cache_wsdl' => WSDL_CACHE_NONE ); try { $soapClient = new SoapClient($wsdl, $options); } catch(Exception $e) { var_dump($e); } 

Мне был предоставлен ключевой файл .p12 с сертификационным файлом .crt. Используя openssl, я преобразовал .p12-файл в .pem-файл и затем объединил его с .crt-файлом. CertWithKey.pem выглядит хорошо для меня, два файла сертификата находятся в файле.

Независимо от того, что я пытаюсь сделать, я получаю исключение с сообщением SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://domain.com/?wsdl' : failed to load external entity "https://domain.com/?wsdl" .

После звонка с удаленной стороной они признают, что запрос поступает, но они регистрируют эту ошибку: ssl handshake interrupted by system [hint: stop button pressed in browser?!] .

Поскольку я не нашел никакой полезной информации в сети до сих пор, я решил попросить вас, ребята, получить некоторое представление по этому вопросу.

Любые предложения, что можно попробовать? Я запускаю PHP 5.3.8, а IP-адрес сервера белый, указанный в брандмауэре на удаленной стороне.

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

Я использовал программу CLI openssl для преобразования ключевого файла .p12 в ключевой файл .pem. Трюк – это способ преобразования.

Сначала я преобразовал его с этой командой, и у меня возникла проблема, как описано в вопросе:

openssl pkcs12 -in key.p12 -out key.pem -nodes -clcerts

В то время как команда ниже сделала фактический трюк:

openssl pkcs12 -in key.p12 -out key.pem -clcerts

Для получения дополнительной информации см. Источник, который я использовал: https://community.qualys.com/docs/DOC-3273

Те же предложения:

  1. Я использую SoapClient для подключения к службам SSL, и все работает отлично, не указав URL-адрес конечной точки. Тогда я рекомендую вам попробовать без этой опции;

  2. У php SoapClient есть опция с именем «ssl_method», где вы можете изменить некоторые варианты этого протокола. Попробуйте изменить / указать этот параметр, если вы знаете, какой протокол используется;

  3. Укажите «verifypeer => false» и «verifyhost => false» в списке параметров;