Я пытаюсь настроить клиента 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
Те же предложения:
Я использую SoapClient для подключения к службам SSL, и все работает отлично, не указав URL-адрес конечной точки. Тогда я рекомендую вам попробовать без этой опции;
У php SoapClient есть опция с именем «ssl_method», где вы можете изменить некоторые варианты этого протокола. Попробуйте изменить / указать этот параметр, если вы знаете, какой протокол используется;
Укажите «verifypeer => false» и «verifyhost => false» в списке параметров;