PHP CURL CURLOPT_SSL_VERIFYPEER被忽略


117

由于某种原因,我无法将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");
  • 我还尝试使用positiveSSL.ca-bundle做同样的事情,它是我要连接到的服务器的捆绑CA证书。

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

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

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

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

还有其他建议吗?

更新

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


1
您是否针对其他SSL堆栈(也许是GnuTLS与OpenSSL)编译了升级的Curl库?
布鲁诺

我不会这样。系统是Fedora 16,确实是yum update的情况。最令人讨厌的是,我不需要/想要整个验证,而且我似乎无法简单地禁用它。
格雷格

如果您打算使用HTTPS来提高安全性,则始终希望使用此验证过程。
布鲁诺

我知道这一点,但是我这里的用例使这一切都变得多余。另外,我已经将curl更新为最新版本,并将php更新为5.4。现在,错误消息消失了,但是我也没有从卷曲中得到任何帮助:)
Greg

哈,现在我到了curl_errno函数报告状态77的地方,根据手册,该状态为CURLE_SSL_CACERT_BADFILE。
格雷格

Answers:


240

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

还看 CURLOPT_SSL_VERIFYHOST:

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

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

5
无论如何,关闭SSL验证几乎都会消除SSL的所有安全性。您应该改为修复PHP配置。
Scopey

7
@Scopey,但有时在带有自签名证书的本地开发环境中可能需要它。因此,在非公共环境中可能没有任何意义,但是提醒一下,最好在日志中有一些警告(例如SSL verification disabled
Ivan Borshchov

2

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

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

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


确保它不是间歇性的。贝宝(PayPal)和同伴验证在某些地方可行,有时没有,我遇到了问题。似乎是随机的。明确设置cafile路径并告诉curl在哪里解决了问题。
尼尔戴维斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.