繁体   English   中英

cURL 与 SSL 证书失败:错误 58 无法设置私钥文件

[英]cURL with SSL certificates fails: error 58 unable to set private key file

我正在尝试使用 cURL 连接到远程主机。连接需要使用证书和受密码保护的私钥。 到目前为止,我没有成功使用以下代码:

<?php
    $wsdl       = 'https://domain.com/?wsdl';
    $certFile   = getcwd() . '/auth/cert.pem';
    $keyFile    = getcwd() . '/auth/key.pem';
    $password   = 'pwd';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,           $wsdl);
    curl_setopt($ch, CURLOPT_SSLCERT,       $certFile);
    curl_setopt($ch, CURLOPT_SSLKEYPASSWD,  $password);
    curl_setopt($ch, CURLOPT_SSLKEY,        $keyFile);
    #curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    #curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    #curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $output = curl_exec($ch);

    var_dump(curl_errno($ch));
    var_dump(curl_error($ch));

我不断得到的结果是 error 58 : unable to set private key file: '/home/.../domains/.../public_html/auth/key.pem' type PEM

到目前为止我尝试过的事情:

我很确定问题出在我的配置中,但我不确定去哪里找。

我已经解决了这个问题。 我认为,由于与此问题相关的问题数量众多,并且解决方案数量众多,因此其他人将从该解决方案中受益。 开始:

我使用openssl CLI程序将.p12密钥文件转换为.pem密钥文件。 诀窍是转换发生的方式。

首先,我使用此命令对其进行了转换,并遇到了问题中所述的问题:

openssl pkcs12 -in key.p12 -out key.pem -nodes -clcerts

虽然下面的命令做了实际的把戏:

openssl pkcs12 -in key.p12 -out key.pem -clcerts

有关更多信息,请参见我使用的来源: https : //community.qualys.com/docs/DOC-3273

以防万一这对其他搜索此问题的人有用,我最终发现CURLOPT_SSLCERT和CURLOPT_SSLKEY似乎不适用于相对路径。

这是WAMP,Windows上的php版本5.5。

我在使用curl时遇到了同样的错误,在搜索时发现了这个问题。 我正在使用命令curl --key my.pem https://example.com/

对我有用的解决方案是添加 --key 选项并指向同一个 PEM 文件。 显然,PEM 文件(在我的例子中)有密钥和证书。

我用 curl 命令测试了它:

curl --cert my.pem  --key my.pem https://example.com/my/url

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM