繁体   English   中英

PHP Curl 请求使用 CRT、PEM、PFX 和密码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM