【问题标题】:How to send a curl request with pem certificate via PHP?如何通过 PHP 发送带有 pem 证书的 curl 请求?
【发布时间】:2023-04-10 21:53:01
【问题描述】:

我的 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' 类型 PEM

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

【问题讨论】:

    标签: php apache api ssl curl


    【解决方案1】:

    我认为您需要使用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); 
    

    来源:This answer here in SO 帮助我解决类似问题。

    【讨论】:

    • 嗨詹姆斯,非常感谢!!!我实现了代码,现在它报告:“Curl 错误:无法加载 PEM 客户端证书,OpenSSL 错误错误:0906D06C:PEM 例程:PEM_read_bio:没有起始行,(未找到密钥,密码错误或文件格式错误?) “你知道这意味着什么吗?
    • 问题可能出在您的 pem 文件上。你是windows环境吗?看看这个query 是否对你有帮助。确保您的文件以-----BEGIN PUBLIC KEY----- 开头,没有空格。
    • 非常感谢詹姆斯!
    【解决方案2】:

    我想你不见了 curl_setopt($ch, CURLOPT_CAINFO, 'test.pem'); 看看cURL is unable to use client certificate , in local server 有关通过 PHP 在 curl 中使用客户端证书的更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多