我在我的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使用客户端证书