很多人在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。
发布于 2010-09-04 23:03:35
它的用途和含义:
下面的代码告诉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 (默认为2),则CURLOPT_SSL_VERIFYHOST可能还需要为TRUE或FALSE。
如何正确启用和验证:
为了验证正确,我们需要验证提交给我们的证书是真实的。我们通过将其与我们合理*信任的证书进行比较来做到这一点。
如果远程资源受到某个主要CA颁发的证书的保护,比如Verisign、GeoTrust等人,您可以安全地与您可以从http://curl.haxx.se/docs/caextract.html获得的Mozilla证书包进行比较
将文件cacert.pem保存在服务器中的某个位置,并在脚本中设置以下选项。
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");如果您正在连接一个受自签名证书保护的资源,您所需要做的就是获取一份PEM格式的证书副本,并将其附加到上述段落的cacert.pem中。
发布于 2012-11-28 17:30:37
在我的例子中,我不能使用curl_setopt,因为我不能编辑Facebook API类(我正在工作的项目的条件)。
我通过将从http://curl.haxx.se/docs/caextract.html下载的cacert.pem的路径添加到我的php.ini中解决了这个问题
[curl]
curl.cainfo = "c:\wamp\cacert.pem"发布于 2013-04-17 16:39:48
我刚刚遇到了同样的问题,在我的情况下,禁用对等验证是不可接受的。我更新了(来自facebook's gitbub的) fa_ca_chain_bundle.crt文件,现在它可以工作了。
向您致敬,Marek
https://stackoverflow.com/questions/3642772
复制相似问题