【问题标题】:SSL error with PHP curlPHP curl 的 SSL 错误
【发布时间】:2013-02-03 12:27:14
【问题描述】:

各位程序员们好,

我正在使用 https 连接创建 API。我想通过证书检查来保护 API 调用。现在我从 curl 下载了 cacert.pem 并将其放在我的文件夹中,但它不起作用并给我这个错误:

SSL certificate problem: unable to get local issuer certificate

好吧,我确实确定 cacert.pem 文件的位置正确,但是对于你们来说,我一直在编写一些代码以使其正常工作:

 $ch = curl_init($url);
 curl_setopt($ch, CURLOPT_POST      ,1);
 curl_setopt($ch, CURLOPT_USERPWD, $this->api_key . ":" . $this->api_secret);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
 curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . "/cacert.pem");
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
 curl_setopt($ch, CURLOPT_POSTFIELDS    ,$post_vars);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,0);
 curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept: application/json'));
 curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);  // RETURN THE CONTENTS OF THE CALL
 $data = curl_exec($ch);

我希望你们中的一些人能回答我的问题,因为我真的不太了解 SSL 连接。

提前致谢!

【问题讨论】:

标签: php api ssl curl


【解决方案1】:

确保您的证书包可以被您正在运行的脚本读取后,下一步是调查服务器本身。

如果这是您自己的服务器,您很可能忘记安装中间证书,即在颁发的证书和捆绑包随附的证书颁发机构之一之间的证书。

如果您使用的是自签名证书,您的cacert.pem 应该包含您要连接的服务器的公共证书;这可以从私有证书生成,概述为here,称为.crt 文件。

【讨论】:

  • 我在教程的第 6 步。但是我找不到虚拟主机文件?你知道它默认的位置吗?
  • @PaulOostenrijk 这是包含所有 <VirtualHost> 块的文件,假设是 Apache。
  • 我要去我的托管公司检查虚拟主机文件。我现在找不到它.. 你会得到更新!
  • 我已经用虚拟主机修复了它。但是我将我的中间证书和自签名证书添加到了 cacert。然后它起作用了。但它安全吗?
  • @PaulOostenrijk 中间证书应该被添加到你的服务器上形成一个证书链:)
猜你喜欢
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2010-11-19
  • 2020-02-09
相关资源
最近更新 更多