Я получил два файла сертификатов от провайдера, один в формате .cer и один в формате .p7b.Затем я преобразовал p7b-сертификат в p12-сертификат.С этим сертификатом я могу подключиться к wsdl из моего браузера.Затем я приступил к преобразованию этого сертификата в формат .pem, используя некоторые инструкции, найденные на этом сайте.
openssl pkcs12 -clcerts -nokeys -out test.pem -in mycert.p12
openssl pkcs12 -nocerts -out key.pem -in mycert.p12
, а затем расчесал сертификат с ключом с помощью следующей команды:
cat test.pem key.pem > cert.pem
Вот моя конструкция для класса веб-службы:
public function __construct() {
$wsdl_url = 'https://url.to/web_service?wsdl';
$pass = 'passphrase';
$cert = 'cert.pem';
try {
$this->client = new SoapClient($wsdl_url, array('local_cert' => $cert, 'passphrase' => $pass));
} catch(SoapFault $e) {
print_r($e);
}
}
И вот ошибка:
SSL operation failed with code 1. OpenSSL Error messages: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca in /var/www/html/..
Попытка проверить сертификат с помощью:
openssl verify cert.pem
выдает мне следующую ошибку:
error 20 at 0 depth lookup:unable to get local issuer certificate
Я также пытался создать .pem-сертификат с помощью следующей команды openssl:
openssl pkcs12 -in mycert.p12 -out mycert.pem
Подтверждение этого дает мне ОК, но PHPвыдает мне следующую ошибку:
Unable to set local cert chain file `mycert.pem'; Check that your cafile/capath settings include details of your certificate and its issuer
Я предполагаю, что должна быть возможность каким-то образом заставить его работать, так как я могу получить доступ к wsdl через мой браузер, используя .p12-сертификат.Но я не могу найти решение о том, как мне поступить.Заранее спасибо.