如何通过PHP发送一个curl请求和pem证书?

我在我的Apache服务器有一个PHP脚本,必须发送curl请求到合作伙伴的服务器。 合作伙伴给我一个.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'type PEM

考虑它发送.pem文件,并说“它没有密码”

我认为你需要使用tmpfile()和stream_get_meta_data 。

 $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); 

来源: 这个答案在这里帮助我有类似的问题。

我想你错过了curl_setopt($ch, CURLOPT_CAINFO, 'test.pem'); 看看cURL是无法使用客户端证书,在本地服务器更多关于通过PHP curl使用客户端证书