cURL错误(58):无法设置私钥文件:'/var/www/work/xml/keys/client.pem',类型为PEM。

4

当我使用私钥和公钥连接到服务器时,出现以下错误:

cURL错误(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);

我认为你的私钥文件应该只包含私钥。证书文件应该包含你的公共证书和任何链接证书。 - Arnold Daniels
我也做了那个,但输出没有任何影响 :( - Gajendra Bang
我不确定,但是看起来你可能在使用错误的文件..,server.pem 是根证书吗?似乎 $pemfile 应该是类似于 .../client.pem 的东西,而 $keyfile 应该是类似于 .../client.key 的东西。 - quickshiftin
请发布详细日志记录。 - hanshenrik
同时发布<?php var_dump(shell_exec("namei -l /var/www/work/xml/keys/client.pem"));的输出。 - hanshenrik
1个回答

1

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


我已经进行了交叉检查。所有文件的权限都是777。 - Gajendra Bang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接