Not hacking CurlException: 60 (cURL SSL Certificate Verification)
Posted
技术标签:
【中文标题】Not hacking CurlException: 60 (cURL SSL Certificate Verification)【英文标题】: 【发布时间】:2011-04-08 06:02:25 【问题描述】:很多人在使用 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
我能找到的唯一信息建议将以下代码行添加到 curl:
$opts[CURLOPT_SSL_VERIFYPEER] = false;
$opts[CURLOPT_SSL_VERIFYHOST] = 2;
我知道这是可行的,但是这里发生了什么? 是否有任何服务器设置/配置可以更改而不是破解 facebook.php。
【问题讨论】:
这里验证谁的证书? 【参考方案1】:它的作用和意义:
以下代码告诉 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 被禁用(默认为 2),CURLOPT_SSL_VERIFYHOST 也可能需要为 TRUE 或 FALSE。
如何正确启用和验证:
要正确验证,我们需要验证提供给我们的证书是真实的。我们通过将其与我们合理*信任的证书进行比较来做到这一点。
如果远程资源受 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 中。
【讨论】:
我认为他的主要问题是如何解决这个问题。 那么这仅发生在我的一台服务器上而不发生在另一台服务器上的原因是什么? @John,其他服务器有内置的安全证书,不需要手动指定证书。就像浏览器 IE/Firefox 内置了证书一样,您不需要每次连接到 GMAil、HoTMaiL 等安全登录站点时都提供证书文件。 变量$ch,在哪里定义的? 在 facebook.php 中。谢谢你!【参考方案2】:就我而言,我无法使用 curl_setopt,因为我无法编辑 Facebook API 类(我正在从事的项目的条件)。
我通过添加从http://curl.haxx.se/docs/caextract.html下载的cacert.pem的路径到我的php.ini解决了这个问题
[curl]
curl.cainfo = "c:\wamp\cacert.pem"
【讨论】:
【参考方案3】:我刚刚遇到了同样的问题,在我的情况下禁用对等验证是不可接受的。 我更新了 fa_ca_chain_bundle.crt 文件(来自facebook's gitbub),它现在可以工作了。
问候, 马立克
【讨论】:
以上是关于Not hacking CurlException: 60 (cURL SSL Certificate Verification)的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的 CurlException:77:设置证书验证位置时出错
Facebook CurlException 3 没有设置 URL
致命错误:未捕获的 CurlException:7:无法连接到第 887 行 ....src/base_facebook.php 中抛出的主机