PHP CURL CURLOPT_SSL_VERIFYPEER被忽略

Gre*_*reg 103 php ssl https curl

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

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

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

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
    
    Run Code Online (Sandbox Code Playgroud)
  • 启用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");
    
    Run Code Online (Sandbox Code Playgroud)
  • 我还尝试使用positiveSSL.ca-bundle做同样的事情,它是作为我尝试连接的服务器的捆绑CA证书提供的.

  • 使用curl.cainfo=cacert.pem(在同一目录中的文件并通过apache访问)编辑php ini设置

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

不幸的是,以上都没有能够解决我的问题,我经常遇到SSL CA证书(路径?访问权限?)消息的问题.

我首先不需要这个验证(我知道安全问题).

有人有任何其他建议吗?

UPDATE

在更新到最新的库并重新启动整个盒子之后,不仅仅是我正在做的apache似乎现在再次正在工作!

clo*_*ver 214

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

另外看看 CURLOPT_SSL_VERIFYHOST:

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

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Run Code Online (Sandbox Code Playgroud)

  • @Scopey但有时您可能需要在具有自签名证书的本地开发环境中使用它.所以可能在非公共环境中没有任何意义,但作为提醒,在日志中发出一些警告总是更好(例如,"SSL验证已禁用") (5认同)
  • 无论如何,关闭SSL验证几乎都会消除SSL的所有安全性.您应该修改您的PHP配置. (4认同)

小智 6

$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;
Run Code Online (Sandbox Code Playgroud)