4

各位程序员好,

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

提前致谢!

4

1 回答 1

2

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

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

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

于 2013-02-18T23:40:47.267 回答