卷曲错误:无法加载PEM客户端证书

时间:2018-06-14 12:06:56

标签: php curl ssl-certificate

我正在尝试通过传递证书

来使用PHP curl发送GET请求
 --conf "spark.executor.extraJavaOptions=-XX:+UseG1GC"

但不知道如何传递“密码”所以我收到此错误

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$pemFile = tmpfile();
fwrite($pemFile, "demo-cert.p12");//the path for the pem file
$tempPemPath = stream_get_meta_data($pemFile);
$tempPemPath = $tempPemPath['uri'];
curl_setopt($ch, CURLOPT_SSLCERT, $tempPemPath);
$result = curl_exec($ch);
if(!$result)
{
    echo "Curl Error: " . curl_error($ch);
}
else
{
    echo "Success: ". $result;
}

[更新]

将demo-cert.p12更改为demo-cert.pem,该文件与php文件一起存在,但由于没有发送密码,仍然会出现同样的问题。证书文件夹包含其他2个文件:demo-combined.pem和demo-key.pem但首先需要发送密码。

[UPDATE2]

Curl Error: could not load PEM client certificate, OpenSSL error error:0906D06C:PEM 
routines:PEM_read_bio:no start line, (no key found, wrong pass phrase, or wrong file format?)

这些文件与PHP文件一起存储在同一目录中。仍然得到相同的错误

[更新3]

如何编辑代码以发送服务器证书?

curl --show-error --verbose --cacert server-cert.pem --cert cert2.pem

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSLCERT, 'demo-key.pem');
curl_setopt($ch, CURLOPT_SSLKEY, 'demo-cert.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'pass');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, 'pass');

结果是:

curl_setopt($ch, CURLOPT_SSLCERT, 'demo-cert.pem');
curl_setopt($ch, CURLOPT_SSLKEY, 'demo-key.pem');

不像在浏览器中打开相同的URL那样返回XML数据。有什么问题吗?

2 个答案:

答案 0 :(得分:1)

由于您使用的是文件名-请尝试使用绝对路径。您不需要将密钥和证书都转换为PEM。只需使用同时具有证书和密钥的.PEM文件。

例如

curl_setopt($ch, CURLOPT_SSLCERT, 'c:/wamp64/www/bit-tool/www/testcert.pem');

答案 1 :(得分:0)

首先更改" CURLOPT_POST"从真到假。第二次交换" CURLOPT_SSLCERT"使用" CURLOPT_SSLKEY"发送正确的证书和密钥文件名的值感谢@vstm,现在我得到了正确的结果。

谢谢大家。