140

出于某种原因,我无法将 CURL 与 HTTPS 一起使用。在我升级 curl 库之前,一切正常。现在我在尝试执行 CURL 请求时遇到此响应: SSL CA 证书问题(路径?访问权限?)

按照此处发布的有关相关问题的建议,我尝试执行以下操作:

  • 禁用主机和对等方的验证

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
    
  • 启用CURLOPT_SSL_VERIFYPEER并指向从http://curl.haxx.se/docs/caextract.html下载的 cacert.pem

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
    
  • 我还尝试对作为我尝试连接的服务器的捆绑 CA 证书提供的 positiveSSL.ca-bundle 做同样的事情。

  • 编辑 php ini 设置curl.cainfo=cacert.pem(文件在同一目录中,可被 apache 访问)

  • 重命名/etc/pki/nssdb/etc/pki/nssdb.old

不幸的是,以上都无法解决我的问题,并且我不断收到 SSL CA 证书问题(路径?访问权限?)消息。

而且我首先不需要此验证(我知道安全问题)。

有人有其他建议吗?

更新

在更新到最新的库并重新启动整个机器之后,不仅仅是我正在做的 apache 现在似乎又可以工作了!!!

4

3 回答 3

283

根据文档:要验证主机或对等证书,您需要使用该选项指定备用证书,CURLOPT_CAINFO或者可以使用该CURLOPT_CAPATH选项指定证书目录。

也看看CURLOPT_SSL_VERIFYHOST:

  • 1 检查 SSL 对等证书中是否存在通用名称。
  • 2 检查公用名是否存在,并验证它是否与提供的主机名匹配。

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
于 2013-03-06T01:10:35.090 回答
2

我们在 CentOS7 机器上遇到了同样的问题。禁用VERIFYHOST VERIFYPEER并没有解决问题,我们不再出现 cURL 错误,但响应仍然无效。对与 cURL 相同的链接执行wget操作也会导致证书错误。

-> 我们的解决方案也是重新启动 VPS,这解决了它,我们能够再次完成请求。

对我们来说,这似乎是一个内存损坏问题。重新启动 VPS 重新加载了内存中的库,现在它可以工作了。因此,如果上述解决方案@clover不起作用,请尝试重新启动您的机器。

于 2016-06-08T10:54:00.370 回答
1
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return data inplace of echoing on screen
curl_setopt($ch, CURLOPT_URL, $strURL);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
$rsData = curl_exec($ch);
curl_close($ch);
return $rsData;
于 2022-02-23T04:01:47.147 回答