2013-02-05 26 views
3

我在使用私钥和公钥连接到服务器时出现此错误。cURL错误(58):无法设置私钥文件:'/var/www/work/xml/keys/client.pem'类型PEM

卷曲错误(58):无法设置私钥文件: '/var/www/work/xml/keys/client.pem' 型PEM

我的私钥同时包含密钥和证书。它也有密码。

我当前的代码是在这里:

$url="https://example.website.com"; 

    $pemfile = "/var/www/work/xml/keys/server.pem"; 
    $keyfile = "/var/www/work/xml/keys/client.pem"; 

    $requestXml = file_get_contents("net.xml"); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HTTP_VERSION, 1.1); 
    curl_setopt($ch, CURLOPT_PORT, 443); 
    curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS); 

    curl_setopt($ch, CURLOPT_VERBOSE, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 

    curl_setopt($ch, CURLOPT_FAILONERROR, 0); 

    curl_setopt($ch, CURLOPT_SSLCERT, $pemfile); 
    curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM'); 
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'PASSWORD'); 


    curl_setopt($ch, CURLOPT_SSLKEY, $keyfile); 
    curl_setopt($ch, CURLOPT_SSLKEYPASSWD, "PASSWORD"); 


    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXml); 

    $data = curl_exec($ch); 
    $curl_errno = curl_errno($ch); 
    $curl_error = curl_error($ch); 

    if ($curl_errno > 0) 
    { 
     echo "cURL Error ($curl_errno): $curl_error\n"; 
    } 
    else 
    { 
     header("Content-Type: text/xml"); 
     print_r($data); 
    } 

    curl_close($ch); 
+0

我认为你的私钥文件应该只包含私钥。证书文件应包含您的公共证书+任何链接的证书。 –

+0

我也是这样做的,但对输出没有影响:( –

+0

IDK,但在我看来你可能会使用错误的文件..,* server.pem *根CA?好像'$ pemfile'应该是类似于* .../client.pem *和'$ keyfile'应该是* .../client.key *。 – quickshiftin

回答

0

看来你的脚本不能正确地访问$keyfile文件。您可能需要仔细检查您的脚本(或进程)是否具有正确的权限,或修改文件权限。

+0

我已经对它进行了交叉检查,所有文件的权限为777 –

相关问题