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

2022-08-30 14:00:52

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

我已经在我的apache虚拟主机上配置了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);

答案 1

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

有两种解决方案:

  1. 购买有效的 SSL 证书。
  2. 在 Curl 中禁用 SSL 验证。(添加 --不安全选项)

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


答案 2

此外,还有两个其他设置可以更改为 /:CURLOPT_SSL_VERIFYPEERfalse0

CURLOPT_SSL_VERIFYHOST
CURLOPT_SSL_VERIFYSTATUS

请注意,您应该修复SSL证书和设置,而不是禁用安全性!


推荐