PHP 使用导出密码(密码)的 P12 (PFX) 证书的 CURL 请求
PHP CURL request for a P12 (PFX) certificate with an export password (Passphrase)
基于 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(没有密码)成功地与服务器建立通信。
但是,尽管在 SSLCERTPASSWD[= 中提供了密码,但包含密码 demo_pfx_withPassphrase.p12 的文件无法做到这一点49=]选项
这是我得到的以下错误。
-------------------- 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
这应该可以做到。
最后,如果要为关联的 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
基于 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(没有密码)成功地与服务器建立通信。
但是,尽管在 SSLCERTPASSWD[= 中提供了密码,但包含密码 demo_pfx_withPassphrase.p12 的文件无法做到这一点49=]选项
这是我得到的以下错误。
-------------------- 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
这应该可以做到。
最后,如果要为关联的 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