PHP curl的SSL错误

PHP curl的SSL错误,php,api,ssl,curl,Php,Api,Ssl,Curl,各位程序员好 我正在制作一个带有https连接的API。我想通过证书检查来保护API调用。现在我已经从curl下载了cacert.pem,并将其放在我的文件夹中,但它不起作用,并导致以下错误: SSL certificate problem: unable to get local issuer certificate 我确信cacert.pem文件的位置是正确的,但对于你们来说,我一直在编写一些代码来让它工作: $ch = curl_init($url); curl_setopt($ch

各位程序员好

我正在制作一个带有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连接


提前谢谢

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

如果这是您自己的服务器,则可能是您忘记安装中间证书,即位于已颁发证书和捆绑包附带的其中一个证书颁发机构之间的证书


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

您从哪里下载了cacert.pem?他有一个包裹。绝对路径:这应该有效;您确定该文件可读吗?是。。我已将其更改为777以确保其可读性,但我再次遇到相同的错误:(我想你会从这个链接中找到你的解决方案:我在教程的第6步。但是我找不到虚拟主机文件?你知道默认情况下这个文件在哪里吗?@PaulOostenrijk它是一个包含所有
块的文件,假设是Apache。我将在我的托管公司检查virtualhost文件。我现在找不到它了。。你需要我会得到一个更新!我已经用虚拟主机修复了它。但是我将我的中间证书和自签名证书添加到了cacert。然后它工作了。但是它安全吗?@PaulOostenrijk应该在您的服务器上添加中间证书以形成一个证书链:)