基于PEM证书和一个密钥文件,我正在创建两个P12(Pfx(文件,包括和不包括密码
-
demo_cert.pem
-
demo_key.pem
-
demo_pfx_withoutPassphrase.p12
-
demo_pfx_withPassphrase.p12
openssl pkcs12 -export -clcerts -in demo_cert.pem -inkey demo_key.pem -out demo_pfx_withoutPassphrase.p12 Enter Export Password: (empty) Verifying - Enter Export Password: (empty) openssl pkcs12 -export -clcerts -in demo_cert.pem -inkey demo_key.pem -out demo_pfx_withPassphrase.p12 Enter Export Password: 12345 Verifying - Enter Export Password: 12345
此文件用于与服务器通信。
<? php
try{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json,application/octet-stream"));
curl_setopt($curl, CURLOPT_SSLCERTTYPE, "P12");
curl_setopt($curl, CURLOPT_SSLCERT, getcwd() . 'demo_pfx_withPassphrase.p12');
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, '12345');
//curl_setopt($curl, CURLOPT_SSLKEYPASSWD, '12345');
$resp = curl_exec($curl)
if (curl_errno($curl)) {
$error_msg = curl_error($curl);
echo 'Curl error: ' . curl_error($curl);
echo "<br>";
}
else{
echo curl_getinfo($curl);
echo 'Curl info: ' . curl_getinfo($curl)[0];
echo "<br>";
}
}
catch(Exception $e){
echo $e;
}
?>
我能够使用demo_pfx_withoutPassphrase.p12(没有密码短语(成功地与服务器建立通信。
但是,对于包含密码短语的文件来说,这是不可能的,demo_pfx_withPassphrase.p12,尽管在SSLCERTPASSWD选项中提供了密码
这是我得到的以下错误。
-------------------- Error response from the REMOTE SSL SERVER --------------------
58
int(58)
Curl error: could not open PKCS12 file 'demo_pfx_withPassphrase.p12'
如何使用包含密码短语的P12文件建立与服务器的连接?
如有任何意见和建议,我们将不胜感激。
最终找到了P12(pfx(证书无法使用demo_pfx_withPassphrase.P12(带密码短语(与服务器建立通信的解决方案
证书文件没有读取权限
提供对证书文件的读取权限
chomod +r demo_pfx_withPassphrase
这样就可以了。
最后,wrt为关联的P12文件提供密码短语,提供SSLKEYPASSWD或SSLCERTPASSWS。这两种都可以。
// --- Authorized Certificate with passphrase
curl_setopt($curl, CURLOPT_SSLCERT, getcwd() . 'demo_pfx_withPassphrase.p12');
curl_setopt($curl, CURLOPT_SSLKEYPASSWD, '12345'); // either sslkeypsswd
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, '12345'); // or sslcertpasswd