忽略PHP CURL CURLOPT_SSL_VERIFYPEER

忽略PHP CURL CURLOPT_SSL_VERIFYPEER,php,ssl,curl,https,Php,Ssl,Curl,Https,由于某些原因,我无法将CURL与HTTPS一起使用。在我升级curl库之前,一切都很正常。现在,我在尝试执行CURL请求时遇到这样的响应:SSL CA证书(路径?访问权限?)有问题 以下是关于相关问题的建议,我尝试了以下几点: 禁用主机和对等机的验证 curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true); 启用CURLOPT\u

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

以下是关于相关问题的建议,我尝试了以下几点:

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

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
    
  • 启用
    CURLOPT\u SSL\u VERIFYPEER
    并指向从

  • 我还尝试对positiveSSL.ca-bundle执行相同的操作,它作为捆绑ca证书提供给我尝试连接的服务器

  • 使用
    curl.cainfo=cacert.pem
    编辑PHPINI设置(文件位于同一目录中,可由apache访问)

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

不幸的是,以上这些都不能解决我的问题,我经常遇到SSL CA cert(路径?访问权限?)消息的问题

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

有人有其他建议吗

更新


在更新到最新的库并重新启动整个程序之后,不仅仅是我正在做的apache,现在一切似乎又开始工作了

根据文档:要验证主机或对等证书,您需要使用
CURLOPT\u CAINFO
选项指定备用证书,或者可以使用
CURLOPT\u CAPATH
选项指定证书目录

另请查看
CURLOPT\u SSL\u VERIFYHOST:

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


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

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


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

您是否升级了针对不同SSL堆栈编译的Curl库(可能是GnuTLS v.s OpenSSL)?我不这么认为。该系统是Fedora 16,而yum update的情况确实如此。最令人恼火的是,我不需要/不想要整个验证,而且我似乎无法简单地禁用它。如果您打算使用HTTPS来实现安全性,您将始终希望有这个验证过程。我知道这一点,但是我的用例在这里使它变得有点多余。此外,我还将curl更新为最新版本,将php更新为5.4。现在,错误消息消失了,但我也没有从curl得到任何信息:)哈,现在我得到了一些curl\u errno函数报告状态77,根据手册,状态77是CURLE\u SSL\u CACERT\u BADFILE。关闭SSL验证几乎消除了SSL的所有安全性。您应该改为修复PHP配置。@Scopey,但有时在具有自签名证书的本地开发环境中可能需要它。因此,在非公共环境中可能没有任何意义,但作为提醒,最好在日志中设置一些警告(例如禁用SSL验证),确保它不是间歇性的。我对paypal和同行验证有一个问题,有时有效,有时无效。这似乎是随机的。明确地设置cafile路径并告诉curl问题的解决地点。
curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);