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

新手上路,请多包涵

我正在测试一个使用 curl_exec php 函数和 CA 证书的 API,但是出现了问题,我有点迷茫。

我已经在我的 apache VirtualHost 上配置了 SSL,看起来还不错(打开 https:://[myVHost] … 有效)。

但是 API curl 调用给了我这个消息:

  • SSL peer certificate or SSH remote key was not OK

我对 SSL 不是很有经验,所以我对它的原因知之甚少。

更新:

这是我在 cURL 请求中使用的代码,我已经注释了 2 行并更改了它们的值(查看 ‘TODO’ 行)并且以这种方式工作,但这只是一个工作…

 $opts[CURLOPT_URL] = $url;
    $opts[CURLOPT_RETURNTRANSFER] = true;
    $opts[CURLOPT_CONNECTTIMEOUT] = 50;
    $opts[CURLOPT_TIMEOUT] = 100;
    $headers = array(
        'Accept: application/json',
        "User-Agent: APIXXX-PHP-Client");
    $opts[CURLOPT_HTTPHEADER] = $headers;
    $opts[CURLOPT_USERPWD] = $env->getApiKey() . ':';
    if (certificatePresent()) {

        //  $opts[CURLOPT_SSL_VERIFYPEER] = true;
        //  $opts[CURLOPT_SSL_VERIFYHOST] = 2;

        // TODO: SET IT BACK
        $opts[CURLOPT_SSL_VERIFYPEER] = 0;
        $opts[CURLOPT_SSL_VERIFYHOST] = 0;

        $opts[CURLOPT_CAINFO] = $path

      }

    curl_setopt_array($curl, $opts);

    $response = curl_exec($curl);

原文由 WonderLand 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可能正在使用自签名 SSL 证书,当设置 CURLOPT_SSL_VERIFYPEER 选项时,该证书不会通过。

有两种解决方案:

  1. 设置有效的 SSL 证书。
  2. 在 Curl 中禁用 SSL 验证。 ( 添加 –insecure 选项

如果您禁用验证,您将无法确定您是否真的在与您的主机通信。因此,这取决于您需要的安全级别。

原文由 Daniel Milde 发布,翻译遵循 CC BY-SA 4.0 许可协议

这个错误我花了几乎一整天的时间,问题出在使用 ipv6 上,并且调用的 api server 不支持 ipv6。解决方案: curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_VERSION_IPV4);

原文由 Oleh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题