PHP 使用导出密码(密码)的 P12 (PFX) 证书的 CURL 请求

PHP CURL request for a P12 (PFX) certificate with an export password (Passphrase)

基于 PEM 证书和密钥文件,我正在创建两个 P12 (Pfx) 文件,有和没有密码

此文件用于与服务器通信。

<? 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 文件提供密码,请提供 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