[英]PHP Curl request with CRT, PEM, PFX and Passphrase
我在 PHP 中使用了以下代码。 我搜索了几个站点并在 curl function 下工作。 在 Postman 添加证书(设置-> SSL 验证设置)中,它通过 CRT、PEM、PFX 和密码短语工作。 但是当我要在 PHP 代码中使用它时,它不起作用。
function curlapi() {
$url = "https://exampleurl.com/service";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Content-Type: application/json",
);
$data = '{"login":"test_login","password":"test_password"}';
$pemFile = tmpfile();
fwrite($pemFile, "/folder/path/test_file.pem");//the path for the pem file
$tempPemPath = stream_get_meta_data($pemFile);
$tempPemPath_uri = $tempPemPath['uri'];
curl_setopt($curl, CURLOPT_SSLCERT, $tempPemPath_uri);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($curl);
echo "<pre>";
print_r(curl_getinfo($curl)) . '<br/>';
echo curl_errno($curl) . '<br/>';
echo curl_error($curl) . '<br/>';
curl_close($curl);
print_r($resp);
exit;
}
curlapi();
最后,我担心 CURL 请求中没有使用 CRT、PFX 和密码短语。 它仅适用于 PEM 文件路径。
<?php $data = array(
"PageNumber" => 1,
"PageSize" => 100,
"SearchCriteria" => array(
"keyword" => "Getvalue"
));
$pemfile = getcwd()."/assets/path/file.pem"; $curl = curl_init($url);
$method = "POST";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CAINFO, $pemfile);
curl_setopt($curl, CURLOPT_SSLCERT, $pemfile);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_POST, true);
$headers = array(
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
$resp = curl_exec($curl);
/*echo "<pre>";
print_r(curl_getinfo($curl)) . '<br/>';
echo curl_errno($curl) . '<br/>';
echo curl_error($curl) . '<br/>';*/
curl_close($curl);
?>
我知道我很晚才回复,但是 CURL 请求确实支持带密钥的 PFX 文件格式,下面是相同的代码
Curl::to($url)
->withHeaders($headers)
->withContentType('application/json')
->withOption('HTTP_VERSION', 'CURL_HTTP_VERSION_1_1')
->withOption('SSLCERTTYPE', 'P12')
->withOption('SSLCERT', <Path of the Certificate>)
->withOption('SSLKEYPASSWD', <passphrase used to create pfx>)
->withOption('HTTP_VERSION', 'CURL_HTTP_VERSION_1_1')
->withData(json_encode($body))
->withTimeout(30)
->post();
使用 curl 请求发送 PFX 文件的主要关键是告诉 CURL 您正在为此目的传递 P12 格式文件,我们正在使用:
'SSLCERTTYPE','P12'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.