Laravel 5 Socialite - cURL错误77:错误设置证书验证位置

时间:2015-05-14 15:10:14

标签: php ssl curl laravel-5 laravel-socialite

我在Laravel 5中使用社交名流来设置Facebook登录。我仔细按照说明操作,直到遇到以下错误

cURL error 60: SSL certificate problem: unable to get local issuer certificate

所以我找到了this的答案来修复它确实通过但后来我收到了这个错误

cURL error 77: error setting certificate verify locations:
CAfile: /Applications/XAMPP/xamppfiles/cacert.pem
CApath: none

任何想法导致此错误的原因是什么?!以及如何解决它?!

23 个答案:

答案 0 :(得分:27)

我也遇到了这个问题。事实证明,我的php.ini文件中的证书设置路径不正确。忘了.txt扩展名。

我有什么:

curl.cainfo = "C:\xampp\php\cacert.pem"

我将其更改为:

curl.cainfo = "C:\xampp\php\cacert.pem.txt"

希望这会有所帮助。

答案 1 :(得分:20)

  

https://curl.haxx.se/ca/cacert.pem添加cacert.pem文件   C:\ XAMPP \ PHP \ cacert.pem

     

更改php.ini文件中的设置:

     

curl.cainfo =" C:\ xampp \ php \ cacert.pem

答案 2 :(得分:8)

  1. 将此证书(https://curl.haxx.se/ca/cacert.pem)保存为cacert.pem.txt
  2. 中的C:\xampp\php
  3. 添加到php.ini

    curl.cainfo = "C:\xampp\php\cacert.pem.txt"
    
  4. 别忘了重新启动XAMPP(它重启后才能工作)
  5. 然后它运作正常!

答案 3 :(得分:7)

我的错误是:

  

cURL错误77:设置证书验证位置时出错:CAfile:   C:\ xampp \ apache \ bin \ curl-ca-bundle.crt CApath:无(请参见   http://curl.haxx.se/libcurl/c/libcurl-errors.html


这对我来说很好:

  1. 从以下位置下载证书:https://curl.haxx.se/ca/cacert.pem
  2. cacert.pem 文件重命名为 curl-ca-bundle.crt
  3. 将文件复制到 path / to / xampp / apache / bin
  4. 重新启动apache

答案 4 :(得分:3)

php.ini文件中的结帐双引号: 如果你复制并从网上过去,也许你错了双引号:

  

” C:\ XAMPP \ PHP \ cacert.pem.txt”

而不是

  

“C:\ XAMPP \ PHP \ cacert.pem.txt”

答案 5 :(得分:3)

  1. 从(https://curl.haxx.se/ca/cacert.pem)下载
  2. 将名称“ cacert.pem ”更改为“ curl-ca-bundle.crt
  3. 在“ php.ini ”中,在以下行中删除”: curl.cainfo="C:\xampp\apache\bin\curl-ca-bundle.crt"

对我有用。

答案 6 :(得分:2)

我在 windows 上的 php 版本 8.0.3 中遇到了同样的问题: 解决方案是我必须取消注释并在 php.ini 文件中设置 openssl.capath=path of certs。

我已经设置了 openssl.cafile 所以它没有为此抛出错误但是 oepnssl.capath 没有设置所以错误在那里。

openssl.cafile="C:\Users\Akta\Softwares\php-8.0.3-nts-Win32-vs16-x64\extras\ssl\demoCA\cacert.pem"

openssl.capath="C:\Users\Akta\Softwares\php-8.0.3-nts-Win32-vs16-x64\extras\ssl\demoCA\certs"

答案 7 :(得分:2)

您需要将现有证书替换为另一个here。之后:

  • 提取并将其添加到xampp\php\ext
  • 打开xampp\php\php.ini
  • 将此行curl.cainfo='location from the first step'添加到文件末尾。
  • 重启,现在应该正常工作。

这是source链接。

答案 8 :(得分:1)

如果有人使用Plesk运行Windows,则会出现此错误。

您必须确保curl.cainfo路径位于Plesk PHP目录中,否则即使使用此修复程序也会出现上述错误。

curl.cainfo = "C:\Program Files (x86)\Parallels\Plesk\Additional\PleskPHP55\extras\ssl\cacert.pem.txt"

为我固定。希望这有一天能帮到某个人。

答案 9 :(得分:1)

在您的 php.ini 文件中,您还应该更新您的

;openssl.cafile 

使用您在更新时使用的相同 cacert.pem 链接

;curl.cainfo

看看我之前和之后的

;curl.cainfo =

;openssl.cafile=

curl.cainfo ="C:\php-7.4.11\extras\ssl\cacert.pem"

openssl.cafile="C:\php-7.4.11\extras\ssl\cacert.pem"

curl.cainfo ="C:\php-7.4.11\extras\ssl\cacert.pem" 这修复了 cURL 60 错误,而 openssl.cafile="C:\php-7.4.11\extras\ssl\ cacert.pem”修复了 cURL 77 错误。

玩得开心!

注意:在尝试之前不要忘记重新启动服务器。

对于那些希望找到他们的 php.ini 文件的人,请在 cd 进入您的应用程序后使用此命令

php -i | grep 'Configuration File'

答案 10 :(得分:1)

按照有关错误77的说明,我遇到了一些问题。

在Windows 7上,取决于您的安全设置-下载的文件可能被阻止。查看屏幕截图:

Windows 7 File Properties

一旦我解除阻止文件并确保适当的用户访问权限,我还必须将文件放在以下位置:

  

C:\ xampp \ apache \ bin \ cacert.pem.txt

除了根据该问题的其他帖子更改php.ini。

  

curl.cainfo =“ C:\ xampp \ php \ cacert.pem.txt”

完成上述步骤后,通过XAMPP控制面板重新启动Apache,该错误已解决。

答案 11 :(得分:1)

适用于Windows

我在2008年的窗口上更新了 php 后出现了同样的问题。突然间,我所有的 php 代码都停止了工作。我做了什么,我选择了php.ini然后我发现了一行

;curl.cainfo =

然后我改为

curl.cainfo = "C:\Program Files (x86)\PHP\v7.0\cacert.pem" (记得删除;在curl.cainfo之前)

一切都恢复正常。你需要的是下载一个证书文件cert.pem并将它放在你的服务器上的任何地方,并改变我在php.ini中的行

答案 12 :(得分:1)

这对我有用

titanium build

希望它有助于某人:)

答案 13 :(得分:1)

首先,你需要下载你的" curl.cainfo"文件然后你需要找到 C:\ xampp \ php \ cacert.pem.txt

其次,你需要在Xampp中打开你的php.ini文件并复制它 的 =>

curl.cainfo = C:\ xampp \ php \ cacert.pem.txt 随时随地。

请重新启动 Apache服务器刷新本地主页,这应该可以正常工作。

答案 14 :(得分:1)

我阅读了我能找到的每一个帖子,这个提供了缺失的部分。

背景:我遇到此问题会尝试让Drupal 8检查新开发环境(基于wamp)的可用更新。

  1. 从Mozilla获取证书数据的副本,可在此处找到: https://curl.haxx.se/ca/cacert.pem 如果您想了解更多信息,请阅读以下内容:https://serverfault.com/questions/241046/what-is-the-cacert-pem-and-for-what-to-use-that
  2. 将文件另存为" cacert.pem.txt"不是" cacert.pem" 这是缺失的一块,谢谢LyleK!我不知道为什么,但你必须在最后有.txt扩展名,否则它不起作用。
  3. 明确地将路径添加到" cacert.pem.txt"的位置。将文件发送到您的php.ini
  4. 示例:

    [curl]
    ; A default value for the CURLOPT_CAINFO option. This is required to be an
    ; absolute path.
    curl.cainfo = "C:\wamp\custom\cacert.pem.txt"
    

    如果你正在使用wamp stack重启它。你应该好好去。

答案 15 :(得分:0)

我已经尝试了@ mahesh-singh-chouhan,@ omarsafwany,@ LyleK解决方案。但是反复得到同样的错误。

之后,我更新php.ini文件,没有双引号& .pem 扩展名&我用下面的代码成功获得了理想的结果。

curl.cainfo=E:\Xampp-5.6.3\php\ext\cacert.pem

我还附上了截图。

请先尝试以上用户建议,如果失败也请使用此功能。

感谢您的解决方案它为我创造了方式 @ mahesh-singh-chouhan,@ omarsafwany,@ LyleK     [![在此处输入图像说明] [1]] [1]

  [1]: https://i.stack.imgur.com/3Pgkp.jpg

答案 16 :(得分:0)

我有同样的问题。你必须用一个简单的编辑器(bloc-note)打开文件.pem或pem.txt,然后在你的文件中打开(https://curl.haxx.se/ca/cacert.pem)。你必须重新加载apache。

答案 17 :(得分:0)

似乎您忘记为文件路径添加引号。我遇到了相同的错误(77),这是因为我忘记添加引号了。我通过添加解决了问题。例如:"C:\AppServ\php\cacert.pem"

答案 18 :(得分:0)

您没有仔细阅读错误,现在仔细阅读

cURL错误77:错误设置证书验证位置:CAfile:D:\ XAMPP \ apache \ bin \ curl-ca-bundle.crt CApath:无(请参见http://curl.haxx.se/libcurl/c/libcurl-errors.html

这意味着您缺少一个名为curl-ca-bundle.crt的文件来验证证书位置, 所以你只需要把这个(curl-ca-bundle.crt)文件放到你的XAMPP \ apache \ bin \文件夹中 一切正常,错误77消失了。

curl-ca-bundle.crt,要下载文件,您可以使用此链接https://github.com/nirmalkumar98/nk

答案 19 :(得分:0)

我有同样的问题,我尝试了这里提到的每个解决方案和其他帖子,但没有一个工作。我试过了 1)设置适当的文件权限(没有工作)
2)更改文件扩展名(没有工作)

然后我将cacert.pem文件移到xampp中的php /目录中并重新启动它,它工作。希望它可以帮到某人。

答案 20 :(得分:0)

我在Windows 2012中遇到了这个问题

我有一个虚拟专用服务器托管laravel

然后我遇到此错误,并且

  • here下载该文件
  • 在php 7.2中放入我的extras文件夹
  • 在我的php.ini文件中找到此行

    [卷曲]

    ; CURLOPT_CAINFO选项的默认值。这必须是

    ;绝对路径。    curl.cainfo = extras / ssl / cacert.pem

  • 我将我的下载文件粘贴到php文件中,如下所示:

curl.cainfo =“ C:\ Program Files(x86)\ PHP \ v7.2 \ extras \ ssl \ cacert.pem” cacert error rest api call curl php

  • 然后保存php.ini
  • 然后重新启动我的iis或只是网站

restart your iis windows 2012 cacert 77 error laravel php

就我而言,我只是重新启动网站

答案 21 :(得分:0)

要解决此错误,请使用以下代码:

 $client = new Client(['verify' => false ]);

并在您的代码中像这样使用$ client:

   $headers = [
            'Authorization' => 'Bearer ' . $token,
            'Accept' => 'application/json',
            RequestOptions::BODY => ' any code for your body ',
        ];

        $response = $client->request('POST', 'bar', [
            'headers' => $headers
        ]);

        $response = $response->getBody()->getContents();

        return $response;

答案 22 :(得分:-2)

如果它与git相关:

git config --global http.sslverify "false"

将解决问题。