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