如何解决 cURL 错误 60:Facebook 身份验证时 Laravel 5 中的 SSL 证书

Posted

技术标签:

【中文标题】如何解决 cURL 错误 60:Facebook 身份验证时 Laravel 5 中的 SSL 证书【英文标题】:How to solve cURL error 60: SSL certificate in Laravel 5 while Facebook authentication 【发布时间】:2015-09-07 14:30:40 【问题描述】:

目前,我正在 laravel5 上做一个项目。

我使用 socialize 进行 Facebook 身份验证,但出现下面提到的 cURL 错误。

 RequestException in CurlFactory.php line 162:
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

我在互联网上搜索并完成了以下更改,但没有帮助

已下载 cart.pem 文件 设置路径“curl.cainfo ="C:\xampp\cacert.pem" 同时取消注释“extension=php_curl.dll”

我在控制器中的代码

public function fb()  

    return Socialize::with('facebook')->redirect();

public function cb()    //callback for facebook

    $user = Socialize::with('facebook')->user();
    var_dump($user);

【问题讨论】:

***.com/questions/39686341/… 【参考方案1】:

在使用 Laravel 的本地主机上时,您可以轻松绕过 cURL 错误。

导航到 Client.php 文件 (vendor\guzzlehttp\guzzle\src\Client.php)

将“验证”改为假

$defaults = [
        'allow_redirects' => RedirectMiddleware::$defaultSettings,
        'http_errors'     => true,
        'decode_content'  => true,
        'verify'          => false,
        'cookies'         => false
    ];

【讨论】:

错误的解决方案。随着下一个作曲家更新更改可能会被覆盖。 @Tajni 然后你就可以解决在本地主机上安装证书的麻烦了!【参考方案2】:

https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate

https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/replies/52954

我只是花了几个小时来解决这个问题。正确答案是

“确实将 cacert.pem 文件并修改 php.ini 文件以匹配上面 Moez 的建议。.....但我不断收到 CURL 错误 60's 诀窍是获得一个干净的副本的 PEM 文件!任何涉及 Windows 记事本或其他编辑器的方法都会损坏文件并给出 cURL 错误 60 等。最后我找到了https://gist.github.com/VersatilityWerks/5719158/download 并下载了一个带有 cacert.pem 文件的干净副本的 tar 文件..... . 然后一切都很完美。”

由于您在 Windows 上工作,这可能是问题所在。

【讨论】:

这个 .pem 文件放在哪里? @DanielAccorsi 你可以把它放在任何地方,但它应该可以被 php 解释器读取。 如果有人在使用 Wamp 服务器,正确的文件位于:"C:\wamp\bin\apache\apache\bin\php.ini" VersatilityWerks 不再存在于 github 上。【参考方案3】:

Windows : php.ini

工作正常

【讨论】:

cURL 错误 77:错误设置证书验证位置:CAfile:C:\xampp\php\cacert.pem CApath:无(参见curl.haxx.se/libcurl/c/libcurl-errors.html)【参考方案4】:

对于拔头发的人说“我已经下载了一个原始的 cacert.pem 文件,将其放在正确的位置,正确设置 curl.cainfo,并重新启动了我的 APACHE 服务器,但它只是不起作用!?! ?"... 如果您使用的是 php-fpm,那么 service apache2 restartservice apache2 reload更新参考,您将继续收到错误 60。如果您故意指向 curl.cainfo到错误的路径,您将不会收到预期的错误 77(第一条线索)。

要重新启动 php-fpm 并更新该引用(无需重新启动整个服务器),请使用 service php-fpm restartservice php5-fpm restartservice php7-fpm restartservice php7.0-fpm restart 等,具体取决于您的 php 版本。希望这有助于节省时间。

【讨论】:

【参考方案5】:

经过大量研究,我找到了最好的解决方案。您只需在 vendor/guzzlehttp/guzzle/src/Client.php 文件中将验证设为 false 即可。

    $defaults = [
        'allow_redirects' => RedirectMiddleware::$defaultSettings,
        'http_errors'     => true,
        'decode_content'  => true,
        'verify'          => true, // make this false
        'cookies'         => false,
        'idn_conversion'  => true,
    ];

【讨论】:

不要在生产环境中这样做。在供应商中编辑文件也是一个大错误。如果 composer 更新该库,您所做的任何更改都会被破坏,然后会破坏您的代码。【参考方案6】:

嗯,有时可能会令人困惑。当您检查php.ini 文件时,您将看到;curl.cainfo = “certificate path\cacert.pem” 您必须注意前面有一个分号。删除它和所有引号,然后简单地将文件路径看起来像这样 curl.cainfo = C:\xampp\php\extras\ssl\cacert.pem 如您所见,我的 cacert.pem 位于路径 C:\xampp\php\extras\ssl\cacert.pem 应该在的位置。保存并重新启动您的服务器。

【讨论】:

以上是关于如何解决 cURL 错误 60:Facebook 身份验证时 Laravel 5 中的 SSL 证书的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 社交名媛 Facebook 登录 cURL 错误 60

如何解决 youtube data api V3 中的 curl 错误 60:ssl 证书问题?

laravel 5.5 的 cURL 错误 60 [重复]

解决curl中errno为51和60的错误

黄聪:微信支付错误两个问题的解决:curl出错,错误码:60

Not hacking CurlException: 60 (cURL SSL Certificate Verification)