我从提供商那里得到了两个证书文件,一个是 .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
这是我对 Web 服务类的构造:
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
我还尝试使用以下 openssl 命令创建 .pem-certificate:
openssl pkcs12 -in mycert.p12 -out mycert.pem
验证这一点给了我 OK,但 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 证书。但我无法找到关于我应该如何进行的解决方案。提前致谢。