如何通过PHP发送带有pem证书的curl请求?

如何通过PHP发送带有pem证书的curl请求?,php,apache,api,ssl,curl,Php,Apache,Api,Ssl,Curl,我的Apache服务器中有一个php脚本,它必须向合作伙伴的服务器发送一个curl请求。 Partner给我一个.pem文件,我必须将它附加到我对它的api所做的每个调用中 我的php脚本如下所示: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSLCERT, "test.pem" ); curl_setopt($ch,CURLOPT_SSLCERTTYPE,"PEM"); c

我的Apache服务器中有一个php脚本,它必须向合作伙伴的服务器发送一个curl请求。 Partner给我一个.pem文件,我必须将它附加到我对它的api所做的每个调用中

我的php脚本如下所示:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSLCERT, "test.pem" );
curl_setopt($ch,CURLOPT_SSLCERTTYPE,"PEM");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_VERBOSE, true);

$result = curl_exec($ch);

if(!$result)
{
    echo "Curl Error: " . curl_error($ch);
}
else
{
    echo "Success: ". $result;
}

curl_close($ch);
它返回:

Curl错误:无法设置私钥文件:“test.pem”类型pem


假设它向我发送了.pem文件,并说“它没有密码短语”

我认为您需要使用and

资料来源:帮助我解决类似问题。

我想你失踪了
curl_setopt($ch,CURLOPT_CAINFO,'test.pem')
看看

有关通过PHP在curl中使用客户端证书的更多信息

嗨,詹姆斯,非常感谢!!!我实现了代码,现在它报告:“Curl错误:无法加载PEM客户端证书,OpenSSL错误:0906D06C:PEM例程:PEM_read_bio:no start line,(找不到密钥,错误的密码短语或错误的文件格式?)”你知道这意味着什么吗?问题可能是你的PEM文件。您是否在windows环境中?看看这是否对你有帮助。请确保您的文件以
-----BEGIN PUBLIC KEY-----
开头,不带空格。非常感谢!
$pemFile = tmpfile();
fwrite($pemFile, "test.pem");//the path for the pem file
$tempPemPath = stream_get_meta_data($pemFile);
$tempPemPath = $tempPemPath['uri'];
curl_setopt($ch, CURLOPT_SSLCERT, $tempPemPath);