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

时间:2014-11-24 10:04:51

标签: php ssl curl certificate

我尝试使用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));

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

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

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

2 个答案:

答案 0 :(得分:12)

我已经解决了这个问题。我认为,由于有关此问题的问题数量和不同解决方案的数量,其他人将从该解决方案中受益。这是:

我使用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

答案 1 :(得分:0)

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

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