Сертификат не принят. Не удалось установить файл закрытого ключа


Я пытаюсь установить соединение через SoapClient. Для этого мне нужен сертификат. Я получил сертификат .pfx. Я использовал следующую команду для создания файла .pem.

openssl pkcs12 -in cert.pfx -out cert.pem -nodes

В сертификате есть пароль, поэтому мне нужно ввести его, прежде чем я получу файл cert.pem. Пока все идет хорошо, я думаю.

Теперь я пытаюсь подключиться к сервису WSDL.

$url = "https://test.website.com/webservices/transfer.asmx?WSDL";
$cert = '/path/to/cert.pem';
$passphrase = "12345678";                                               

$soapClient = new SoapClient($url, array('local_cert'=>$cert,'passphrase'=>$passphrase));

Я получаю следующую ошибку:

(Предупреждение) SoapClient::SoapClient(): Не удалось установить файл закрытого ключа `/вар/www/хосты/............./ сертификат.pem'

Я думаю, что проблема в сертификате. Правильно ли я преобразовал файл .pfx в файл.pem?

Author: Siguza, 2015-11-03

1 answers

Проблема, с которой вы столкнулись, заключается в том, что сертификат .pem всегда должен быть зашифрованным файлом. Согласно документам OpenSSL для команды pkcs12, когда вы использовали -nodes, она ничего не шифровала, а вместо этого помещала каждый узел в обычный текст, что приводило к тому, что сертификат .pem был недействительным, и ваш SoapClient не смог проанализировать недопустимый файл.

Чтобы исправить это, надеюсь, вы не удалили оригинал cert.pfx, просто повторно преобразуйте его, используя эту строку:

openssl pkcs12 -in cert.pfx -out cert.pem -clcerts

И ваш файл cert.pem будет правильным.

 6
Author: iam-decoder, 2015-11-11 16:51:59