SSL证书同行或SSH远程密钥不OK(SSL peer certificate or SSH rem

2019-08-05 21:19发布

I'm testing an API that uses curl_exec php function and a CA certificate but something is going wrong and I'm a little lost.

I have configured SSL on my apache VirtualHost and looks ok ( opening https:://[myVHost]... works ).

However the API curl call give me back this message:

  • SSL peer certificate or SSH remote key was not OK

I'm not very experienced with SSL so I have few ideas about the cause of that.

UPDATE:

This is the code I'm using in my cURL request, I have commented 2 lines and changes their value (look at 'TODO' line ) and in this way it is working, however this is just a work arround ...

$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);

Answer 1:

您可能正在使用自签名的SSL certifiacate,当CURLOPT_SSL_VERIFYPEER选项设置,将无法通过。

有两个解决方案:

  1. 购买有效的SSL证书。
  2. 禁用SSL验证的卷曲。 ( 加--insecure选项 )

如果禁用验证,你不能肯定,如果你真的与你的主机进行通信。 因此,它取决于你所需要的安全级别。



Answer 2:

虽然我回答旧的文章,我认为这将有助于新的viewers-

您可以通过添加检查问题

$opts[CURLOPT_VERBOSE] = 1

对于自签名证书的客户端可以使用IP地址的服务器连接,因为主机名不是DNS缓存使用。 在这种情况下,您的服务器证书的通用名称(CN)的需求,以配合服务器IP(把IP地址作为通用名称生成服务器证书时)。 当你这样做是正确,你可以看到这条消息:

共同的名字:192.168.0.1(匹配)

这里192.168.0.1就是一个例子。



Answer 3:

除了CURLOPT_SSL_VERIFYPEER有可能改变为另两个设置false / 0

CURLOPT_SSL_VERIFYHOST
CURLOPT_SSL_VERIFYSTATUS

要注意的是,你应该解决您的SSL证书和设置,而不是禁用安全的!



Answer 4:

你说得对想使SSL_VERIFYPEER如果你担心人在这方面的中间人攻击。

是您的$path设置为指向由API业主提供的证书(或证书捆绑)? 是由证书的Web服务器用户可读? 如果是这样,你验证证书(s)是相同的,当你手动访问HTTPS地址在浏览器中并检查证书?

如果你不能得到它的工作,和你连接到API具有在您的正常浏览器不警告工作的SSL证书,你应该能够设置$path到您的CA根捆绑您的服务器上。



Answer 5:

你可以建立一个有效的SSL证书,并确保其存储在受信任的文件夹中。

有效的SSL证书可以通过包括在显影剂命令提示以下命令创建VS2012 。 (这可以通过键入显影剂在开始时获得的)

下面的命令创建一个可以用来测试Web服务器,其网址是使用安全套接字层(SSL)的Web应用程序中的自签名证书www.example.com 。 由定义的OID -eku选项标识该证书作为SSL server certificate 。 该证书存储在我的商店,并可在计算机(而非用户)的水平。 该证书的私钥可以导出,且证书有效期从May 10, 2010 through December 22, 2011

Makecert -r -pe -n CN = “www.example.com” -b 05/10/2010 -e 2011年12月22日-eku 1.3.6.1.5.5.7.3.1 -ss我-sr LOCALMACHINE -sky交换-SP“微软RSA SChannel加密提供” -sy 12

欲了解更多关于如何创建SSL证书

现在确保这个证书是可信的,这可以通过打字来完成CERTMGR在cmd ..

现在创建的证书是在个人文件夹..复制并粘贴到信任的人的文件夹。

这应该做的伎俩。 让我知道,如果不工作。



Answer 6:

我遇到过同样的问题。 我按照指示在这里: http://siteber.com/download-failed-ssl-peer-certificate-or-ssh-remote-key-was-not-ok/它固定我的。

基本上我去/etc/resolv.conf中

并更换

OpenDNS的服务器:

208.67.222.222

208.67.220.220

谷歌的公共DNS服务器:

域名服务器8.8.8.8 8.8.4.4域名服务器



文章来源: SSL peer certificate or SSH remote key was not OK