PHP CURL请求具有导出密码(密码短语)的P12(PFX)证书



基于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文件提供密码短语,提供SSLKEYPASSWDSSLCERTPASSWS。这两种都可以。

// --- 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

最新更新