Сертификат не принят. Не удалось установить файл закрытого ключа
Я пытаюсь установить соединение через 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?
1 answers
Проблема, с которой вы столкнулись, заключается в том, что сертификат .pem
всегда должен быть зашифрованным файлом. Согласно документам OpenSSL для команды pkcs12, когда вы использовали -nodes
, она ничего не шифровала, а вместо этого помещала каждый узел в обычный текст, что приводило к тому, что сертификат .pem
был недействительным, и ваш SoapClient
не смог проанализировать недопустимый файл.
Чтобы исправить это, надеюсь, вы не удалили оригинал cert.pfx
, просто повторно преобразуйте его, используя эту строку:
openssl pkcs12 -in cert.pfx -out cert.pem -clcerts
И ваш файл cert.pem
будет правильным.