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

Joh*_*ohn 8 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
Run Code Online (Sandbox Code Playgroud)

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

$opts[CURLOPT_SSL_VERIFYPEER] = false;
$opts[CURLOPT_SSL_VERIFYHOST] = 2;
Run Code Online (Sandbox Code Playgroud)

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

sha*_*mar 17

它的作用和意义:

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

  $opts[CURLOPT_SSL_VERIFYPEER] = false;
  $opts[CURLOPT_SSL_VERIFYHOST] = 2;
Run Code Online (Sandbox Code Playgroud)

使用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");
Run Code Online (Sandbox Code Playgroud)

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