gpt4 book ai didi

php - 将 CURLOPT_CAINFO 与更新的 CA bundle 一起使用会导致证书验证失败

转载 作者:行者123 更新时间:2023-12-01 19:22:16 26 4
gpt4 key购买 nike

我使用 cURL 在 WordPress 插件中验证 PayPal 交易。最近,我开始收到有关用户因无法验证交易而无法完成购买流程的错误报告。我追踪到错误:

SSL certificate problem, verify that the CA cert is OK. Details: 
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我在 StackOverflow 中发现了很多与同一问题相关的问题,其中大多数人说解决方案是使用 CURLOPT_CAINFO cURL 的选项提供 CA bundle 。我下载并目前随插件一起提供了 http://curl.haxx.se/ca/cacert.pem 的最新版本(于 2012 年 6 月 28 日转换) 。这解决了我收到的大部分问题。

现在的问题是,我刚刚收到另一份付款失败的报告,错误是相同的:SSL 证书问题,请验证 CA 证书是否正常。。有趣的是,现在的解决方案是删除 CURLOPT_CAINFO 选项。我想知道是否有对此的解释。我认为使用更新的 CA bundle (例如我下载的 bundle )是一种通用解决方案,但事实似乎并非如此。

解决此类问题的通用解决方案是什么?什么可以解释使用更新的 CA bundle 会导致 SSL 证书问题,而不是修复它们?

这是 cURL 配置:

<?php
$ch = curl_init("https://www.paypal.com/cgi-bin/webscr");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
?>

更新:www.paypal.com 的证书由 VeriSign 签署。证书层次结构(如 Firefox 中所示)是:

  • VeriSign 3 级公共(public)主要证书颁发机构 - G5
  • VeriSign 3 类扩展验证 SSL CA
  • www.paypal.com

我可以确认 VeriSign 3 级公共(public)主要证书颁发机构 - G5 的证书包含在我正在使用的 http://curl.haxx.se/ca/cacert.pem 版本中.

感谢您的帮助。

最佳答案

如果您遇到此问题,请不要按照某人的建议禁用对等和主机验证。

这将使您的通信容易受到潜在的中间人攻击,从而违背了使用 SSL 的初衷。

对此问题的一个可能的解释是,设置您的 CURLOPT_CAINFO(特别是设置到不正确的证书路径 - 我会仔细检查这一点)覆盖了服务器上的默认路径。

删除设置后,它会返回到默认值(可以在 PHP 中设置)。

另一件事要记住,CURLOPT_CAINFO 是绝对路径。

关于php - 将 CURLOPT_CAINFO 与更新的 CA bundle 一起使用会导致证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com