没有黑客攻击CurlException:60(cURL SSL证书验证)

时间:2010-09-04 15:01:23

标签: php ssl curl certificate verify

很多人通过Facebook身份验证获得的错误是:

CurlException: 60: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我能找到的关于它的唯一信息建议添加以下代码行来卷曲:

$opts[CURLOPT_SSL_VERIFYPEER] = false;
$opts[CURLOPT_SSL_VERIFYHOST] = 2;

我知道这有效,但这里发生了什么? 是不是可以更改任何服务器设置/配置而不是黑客攻击facebook.php。

3 个答案:

答案 0 :(得分:17)

它做什么&含义:

以下代码告诉cURL不要验证安全证书是否正确。因此,错误消失了。

  $opts[CURLOPT_SSL_VERIFYPEER] = false;
  $opts[CURLOPT_SSL_VERIFYHOST] = 2;

使用SSL连接到远程服务器时,其证书可能无效,已过期或未经过认可的CA签名。 cURL通常会检查它。

CURLOPT_SSL_VERIFYHOST:

  • 1:检查SSL对等证书中是否存在公用名。
  • 2:检查是否存在公用名,并验证它是否与提供的主机名匹配。

CURLOPT_SSL_VERIFYPEER: FALSE停止CURL验证对等方的证书。可以使用CURLOPT_CAINFO选项指定要验证的备用证书,也可以使用CURLOPT_CAPATH选项指定证书目录。如果禁用CURLOPT_SSL_VERIFYPEER,则CURLOPT_SSL_VERIFYHOST也可能需要为TRUE或FALSE(默认为2)。


如何启用&正确验证:

为了正确验证,我们需要验证提交给我们的证书是否真实。我们通过将它与我们合理*信任的证书进行比较来做到这一点。

如果远程资源受到Verisign,GeoTrust等主要CA之一颁发的证书的保护,您可以安全地与Mozilla的CA证书包进行比较,您可以从http://curl.haxx.se/docs/caextract.html获取

将文件cacert.pem保存在服务器的某个位置,并在脚本中设置以下选项。

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");

如果要连接受自签名证书保护的资源,您只需获取PEM格式的证书副本,并将其附加到上段的cacert.pem。

答案 1 :(得分:2)

在我的情况下,我无法使用curl_setopt,因为我无法编辑Facebook API类(我正在处理的项目条件)。

我通过添加从http://curl.haxx.se/docs/caextract.html下载到我的php.ini

的cacert.pem路径解决了这个问题
[curl]
curl.cainfo = "c:\wamp\cacert.pem"

答案 2 :(得分:0)

我遇到了同样的问题,在我的情况下禁用同行验证是不可接受的。 我更新了fa_ca_chain_bundle.crt文件(来自facebook's gitbub),现在可以正常使用。

此致 马立克