PHP curl错误:ssl对等证书或ssh远程密钥不正常

时间:2014-04-16 20:24:26

标签: php curl ssl

我在通过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远程密钥不正常

这种情况并非一直发生,但它正在发生,所以我不确定问题是什么,如果问题出在代码中,或者第三方系统出现问题我&# 39; m comunicating to。

我在其他地方也在这里搜索了此消息错误,并且我发现如果CURLOPT_SSL_VERIFYPEER设置为true,那么它可能是第三方系统的问题&#39;证书,也许是自签名证书。但就我而言,该选项设置为0,我认为该选项被视为false

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

  

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

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

添加选项

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

更多信息请见https://answers.launchpad.net/ubuntu/+question/171188

答案 1 :(得分:0)

虽然我正在回答一个旧帖子,但我认为这会有助于新观众 -

您可以通过添加

来检查问题
curl_setopt($ch, CURLOPT_VERBOSE, 1);

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