как отправить запрос SOAP с сертификатом SSL в PHP?

Я пытаюсь отправить SOAP-запрос PHP с сертификатом DER (это означает, что сертификат не имеет privateKey), но не имеет успеха.

$local_cert = FULL_PATH_TO_MY_CERT; $client = new SoapClient($wsdl, array( 'local_cert' => $local_cert, 'trace' => 1, 'exceptions' => 1, 'soap_version' => SOAP_1_1, 'encoding' => 'ISO-8859-1', 'compression' => (SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP), 'location' => 'https://webserviceurl:port/ws/servlet/ws' )); 

Только я получаю такие ошибки:

Предупреждение (2): SoapClient :: SoapClient () [soapclient.soapclient]: невозможно установить файл закрытого ключа `PATHTOMYLOCALCERT '[APP \ Vendor \ WebServices \ MyWS.php, строка 206]

Предупреждение (2): SoapClient :: SoapClient () [soapclient.soapclient]: не удалось создать дескриптор SSL [APP \ Vendor \ WebServices \ MyWS.php, строка 206]

Предупреждение (2): SoapClient :: SoapClient () [soapclient.soapclient]: Не удалось включить криптографию [APP \ Vendor \ WebServices \ MyWS.php, строка 206]

Предупреждение (2): SoapClient :: SoapClient (https: // webserviceurl: port / ws / servlet / ws? Wsdl) [soapclient.soapclient]: не удалось открыть поток: операция завершилась неудачно [APP \ Vendor \ WebServices \ MyWS.php, строка 206]

Предупреждение (2): SoapClient :: SoapClient () [soapclient.soapclient]: предупреждение ввода-вывода: не удалось загрузить внешнюю сущность «https: // webserviceurl: port / ws / servlet / ws? Wsdl» [APP \ Vendor \ WebServices \ MyWS.php, строка 206]

но я нашел небольшой трюк (в php.net), используя функцию file_get_contents ($ local_cert); ошибки исчезли.

Но появилась новая ошибка.

Результат: строка (773) "Префикс чтения ошибки: Action.Execute"

Я имею в виду … эта ошибка выше … поступает из WebService? потому что он не может аутентифицироваться с моей просьбой?

Спасибо всем. (оцените ваши ответы)

Я использую SSL-сертификат в своем мыльном вызове.

В моем случае я даю абсолютный путь на моем сервере для wsdl и для local_cert Я уже определил те, что были в моем классе. Обратите внимание, что я использую свой сертификат в формате .pem .

 public $local_cert = "/var/www/.../webroot/cert.pem"; public $wsdl = "/var/www/.../webroot/my_wsdl.wsdl"; $this->client = new SoapClient($this->wsdl, array( "trace" => 1, "exceptions" => true, "local_cert" => $this->local_cert, "uri" => "urn:xmethods-delayed-quotes", "style" => SOAP_RPC, "use" => SOAP_ENCODED, "soap_version" => SOAP_1_2 , "location" => $this->location ) ); 

В моем сертификате есть 2 части. Сертификат и закрытый ключ RSA.

 (1)-----BEGIN CERTIFICATE----- MIIFjzCC.... .... -----END CERTIFICATE----- (2)-----BEGIN RSA PRIVATE KEY----- MIIEpAI.... .... ww== -----END RSA PRIVATE KEY---- 

И самое главное, вы должны использовать https ссылку для создания мыльного вызова. Это отлично работает для меня.

Надеюсь, что это поможет вам.