PHP CURL CURLOPT_SSL_VERIFYPEER 被忽略

问题描述 投票:0回答:4

由于某种原因,我无法将 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 证书提供的。

  • 使用

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

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

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

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

还有其他建议吗?

更新

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

php ssl curl https
4个回答
324
投票

根据文档:要验证主机或对等证书,您需要使用

CURLOPT_CAINFO
选项指定备用证书,或者可以使用
CURLOPT_CAPATH
选项指定证书目录。

还看

CURLOPT_SSL_VERIFYHOST:

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

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

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;

3
投票

我们在 CentOS7 机器上遇到了同样的问题。禁用

VERIFYHOST
VERIFYPEER
并没有解决问题,我们不再有 cURL 错误,但响应仍然无效。对与 cURL 相同的链接执行
wget
也会导致证书错误。

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

对于我们来说,这似乎是一个内存损坏问题。重新启动 VPS 会再次将库重新加载到内存中,现在它可以工作了。因此,如果上述

@clover
的解决方案不起作用,请尝试重新启动您的计算机。


1
投票

如果适合您,请尝试以下操作:

对于 SSL 验证,我们需要设置 2

CURLOPT_SSL_VERIFYHOST = 2
CURLOPT_SSL_VERIFYPEER = 2

对于不验证我们需要设置0

CURLOPT_SSL_VERIFYHOST = 0
CURLOPT_SSL_VERIFYPEER = 0

默认值始终为 false

© www.soinside.com 2019 - 2024. All rights reserved.