我尝试通过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 / memb...../ cert.pem'
我认为问题是证书。是我以正确的方式将.pfx转换为.pem的方式吗?
答案 0 :(得分:8)
您遇到的问题是.pem
证书始终应该是加密文件。根据{{3}},当您使用-nodes
时,它没有对任何内容进行加密,而是将每个节点都放入纯文本中,从而导致.pem
证书无效并且{{1}无法解析无效文件。
要解决此问题,希望您还没有删除原始SoapClient
,只需使用此行重新转换它:
cert.pfx
并且您的openssl pkcs12 -in cert.pfx -out cert.pem -clcerts
文件将是正确的。