带有SSL证书的PHP SOAP客户端

Ben*_*Ben 5 php ssl soap wsdl ssl-certificate

我正在尝试使用以下代码设置Soap客户端:

<?php
$wsdl           = 'https://domain.com/?wsdl';
$endpoint       = 'https://domain.com';
$certificate    = dirname(__FILE__) . '/CertWithKey.pem';
$password       = 'pwd';

$options = array(
    'location'      => $endpoint,
    'keep_alive'    => true,
    'trace'         => true,
    'local_cert'    => $certificate,
    'passphrase'    => $password,
    'cache_wsdl'    => WSDL_CACHE_NONE
);

try {
    $soapClient = new SoapClient($wsdl, $options);
} catch(Exception $e) {
    var_dump($e);
}
Run Code Online (Sandbox Code Playgroud)

我获得了一个带有.crt认证文件的.p12密钥文件.使用openssl我已将.p12文件转换为.pem文件,然后将其与.crt文件合并.CertWithKey.pem看起来不错,文件中有两个证书块.

无论我尝试做什么,我都会不断收到消息的异常SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://domain.com/?wsdl' : failed to load external entity "https://domain.com/?wsdl".

在与远程方打电话后,他们确认请求即将进入,但他们正在记录此错误:ssl handshake interrupted by system [hint: stop button pressed in browser?!].

由于到目前为止我没有在网上找到任何有用的信息,我想让你们对这个问题有所了解.

有什么建议可以尝试吗?我正在运行PHP 5.3.8,并且服务器的IP地址在远程控制台的防火墙中列为白色.

Ben*_*Ben 5

我已经解决了这个问题.我认为,由于有关此问题的问题数量和不同解决方案的数量,其他人将从该解决方案中受益.开始:

我使用opensslCLI程序将.p12密钥文件转换为.pem密钥文件.诀窍是转换的方式.

首先,我使用此命令转换它,我遇到了问题中描述的问题:

openssl pkcs12 -in key.p12 -out key.pem -nodes -clcerts

虽然下面的命令做了实际的技巧:

openssl pkcs12 -in key.p12 -out key.pem -clcerts

有关详细信息,请参阅我使用的来源:https://community.qualys.com/docs/DOC-3273