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-адрес сервера отображается в списке в брандмауэре удаленной стороны.

5

Решение

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

Я использовал openssl Программа CLI для преобразования файла ключей .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

5

Другие решения

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

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

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

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

-1

По вопросам рекламы [email protected]