PHP CURL CURLOPT_SSL_VERIFYPEER忽略

2022-08-30 06:51:45

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

以下是这里发布的有关相关问题的建议,我试图执行以下操作:

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

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

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
    
  • 我还尝试对 positiveSSL.ca 捆绑包执行相同的操作,该捆绑包作为我尝试连接到的服务器的捆绑CA证书提供。

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

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

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

而且我一开始就不需要这种验证(我知道安全问题)。

有人有其他建议吗?

更新

在更新到最新的库并重新启动整个盒子之后,不仅仅是我所做的一切的apache现在似乎又工作了!!!


答案 1

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

另请查看CURLOPT_SSL_VERIFYHOST:

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

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

答案 2

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

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

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


推荐