【问题标题】:PHP curl error: ssl peer certificate or ssh remote key was not okPHP curl 错误:ssl 对等证书或 ssh 远程密钥不正确
【发布时间】:2014-05-31 21:58:21
【问题描述】:

我在通过 PHP 中的 CURL 与某些第三方系统通信时遇到一些问题。

这是我必须提交的代码的一部分

$query = '<tag>some xml content with request data</tag>';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://secure.certainsystem.com/function.php");

curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
curl_setopt($ch, CURLOPT_POST, 1);

$data = curl_exec($ch);

所有情况下的请求都是相同的,但有时我没有从 curl_exec($ch) 获得任何数据,相反,当我运行 curl_error($ch) 时,我得到:

SSL 对等证书或 SSH 远程密钥不正确

这种情况并非一直都在发生,但它正在发生,所以我不确定问题可能出在代码中,还是我正在通信的第三方系统中存在问题到。

我在其他地方和这里也搜索过这个消息错误,发现如果CURLOPT_SSL_VERIFYPEER设置为true,那么可能是第三方系统的证书有问题,可能是自签名的一。但在我的情况下,该选项设置为0,我假设它被视为false

最近我发现有一个选项CURLOPT_SSL_VERIFYHOST,但我没有将该选项设置为任何值,所以我认为它采用默认值,根据 PHP.net 文档,它是2,这意味着:

2 检查公用名是否存在,并验证它是否与提供的主机名匹配。

非常感谢您的帮助。

【问题讨论】:

  • 您是否尝试过将 CURLOPT_SSL_VERIFYPEER 设置为 false 而不是 0?
  • 我刚刚尝试将CURLOPT_SSL_VERIFYPEER 设置为false,目前看来还可以。由于这个错误几乎是随机发生的,我将不得不等待,看看它是否有效。

标签: php curl ssl


【解决方案1】:

添加选项

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

更多请看这里https://answers.launchpad.net/ubuntu/+question/171188

【讨论】:

    【解决方案2】:

    虽然我是在回答一个旧帖子,但我认为它会对新观众有所帮助-

    您可以通过添加来检查问题

    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    

    原因在我的帖子here中有解释。

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 2022-07-19
      • 1970-01-01
      • 2016-10-16
      • 2012-09-17
      • 2011-10-31
      • 2022-01-26
      • 1970-01-01
      • 2011-10-19
      相关资源
      最近更新 更多