很多人通过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。
答案 0 :(得分:17)
以下代码告诉cURL不要验证安全证书是否正确。因此,错误消失了。
$opts[CURLOPT_SSL_VERIFYPEER] = false;
$opts[CURLOPT_SSL_VERIFYHOST] = 2;
使用SSL连接到远程服务器时,其证书可能无效,已过期或未经过认可的CA签名。 cURL通常会检查它。
CURLOPT_SSL_VERIFYHOST:
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),现在可以正常使用。
此致 马立克