卷曲错误60,SSL证书问题:证书链中的自签名证书

时间:2014-01-17 14:15:44

标签: php curl oauth vk

我尝试使用正确的APP_ID,APP_SECRET等向

发送curl请求
  https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI 

我需要从中获取access_token,但是得到一个FALSE并curl_error()打印下一条消息:

60: SSL certificate problem: self signed certificate in certificate chain

我的代码是:

    // create curl resource
    $ch = curl_init();

    // set url
    curl_setopt($ch, CURLOPT_URL, $url);
    //return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // $output contains the output string
    $output = curl_exec($ch);
    if ( ! $output) {
        print curl_errno($ch) .': '. curl_error($ch);
    }

    // close curl resource to free up system resources
    curl_close($ch);

    return $output;

当我手动移动到上面的链接时,我得到了access_token。为什么它不适用于卷曲?求助。

5 个答案:

答案 0 :(得分:138)

不应接受建议禁用CURLOPT_SSL_VERIFYPEER的答案。问题是"为什么它不适用于cURL",正如Martijn Hols正确指出的那样,这很危险。

错误可能是由于没有最新的CA根证书捆绑包引起的。这通常是一个带有一堆加密签名的文本文件,卷曲用于验证主机的SSL证书。

您需要确保您的PHP安装具有其中一个文件,并且它是最新的(否则请在此处下载:http://curl.haxx.se/docs/caextract.html)。

然后set in php.ini

curl.cainfo = <absolute_path_to> cacert.pem

如果您在运行时设置它,请使用:

curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");

答案 1 :(得分:39)

此解决方法危险不推荐

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

禁用SSL对等验证不是一个好主意。这样做可能会将您的请求暴露给MITM攻击者。

实际上,您只需要一个最新的CA根证书包。安装更新的版本非常简单:

  1. cURL website
  2. 下载最新的cacert.pem文件
  3. 在php.ini文件中设置它的路径,例如在Windows上:

    curl.cainfo=c:\php\cacert.pem

  4. 那就是它!

    保持安全。

答案 2 :(得分:3)

嘿GUYS:非常重要!这个问题让我疯狂了几天,我无法弄清楚我的卷发是怎么回事。 openssl安装。我终于发现这是我的INTERMEDIATE证书(在我的情况下,GoDaddy)已经过时了。我回到了我的godaddy SSL管理面板,下载了新的中间证书,问题就消失了。

我确信这对你们中的某些人来说是个问题。

显然,GoDaddy因某些问题而在某个时候改变了他们的中间证书,因为他们现在显示了这个警告:

“请务必使用下载的捆绑包中包含的新SHA-2中间证书。”

希望这有助于你们中的一些人,因为我疯了,这清理了我所有服务器上的问题......

答案 3 :(得分:2)

如果系统中未正确安装SSL证书,则可能会收到此错误:

  

cURL错误60:SSL证书问题:无法获取本地颁发者   证书。

您可以按如下方式解决此问题:

使用https://curl.haxx.se/ca/cacert.pem

的更新证书列表下载文件

将下载的cacert.pem文件移至系统中的某个安全位置

更新php.ini文件并配置该文件的路径:

答案 4 :(得分:-3)

错误:SSL证书问题:证书中的自签名证书 链

Solution:
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);    
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);