【问题标题】:Laravel 5 Socialite - cURL error 77: error setting certificate verify locationsLaravel 5 Socialite - cURL 错误 77:错误设置证书验证位置
【发布时间】:2015-07-26 06:38:12
【问题描述】:

我在 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

任何想法是什么导致这个错误?!以及如何解决?!

【问题讨论】:

  • 您使用的是真正的 SSL 证书还是自认证证书? /Applications/XAMPP/xamppfiles/cacert.pem 文件是否存在?
  • @detheridge02 我下载了附件中提到的文件,所以它在路径 /Applications/Xampp/xamppfiles 中
  • 你需要放一个绝对路径而不是相对路径
  • 如果设置了open_basedir,请注意它包含cacert.pem所在的目录。
  • 你确定文件名是cacert.pem还是cacert.perm?正确检查扩展名并确保这是您环境证书路径中的内容,通常位于 curl.cainfo ="C:/wamp64/bin/php/php7.2.10/extras/ssl/cacert.pem 的 php.ini 文件中"

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


【解决方案1】:

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

我有什么:

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

我把它改成什么:

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

希望这会有所帮助。

【讨论】:

  • 仍然无法正常工作。我的文件仅称为“cacert.pem”,没有“.txt”扩展名。
  • @omarsafwany,您的文件扩展名可能已设置为隐藏。证书基本上是一个文本文件,因此应添加 .txt 扩展名及其绝对路径。重新启动您的 apache 服务器以使这些更改生效。
  • + 可能会尝试将 .pem 文件移动到 'bin/php/version-X.X/ext' 文件夹中。
  • 对我来说这是一个典型的 PEBKAC - 当我配置(读取:复制和粘贴)“C:\xampp\...”时,实际的 Xampp 安装在“C:\Program Files\xampp\ ...”。
  • 我必须同意下载的 pem 文件已转换为扩展名为 .txt 的文件。当我将其更改为 cacert.pem.txt 时,我的工作令人惊讶。我已经注意到文件类型以文本格式保存,但我对使用 .txt 扩展名犹豫不决,但最终尝试了一下,它成功了。
【解决方案2】:

https://curl.haxx.se/ca/cacert.pem 中添加 cacert.pem 文件 c:\xampp\php\cacert.pem

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

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

【讨论】:

  • 帮助我使 GuzzleHttp php 包工作。谢谢老兄。
  • 必须将openssl.cafile 中的php.ini 也设置为相同的值,但这对我有用。
【解决方案3】:

我的错误是:

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】:
  1. 将此证书 (https://curl.haxx.se/ca/cacert.pem) 保存为 cacert.pem.txtC:\xampp\php
  2. 添加到php.ini

    curl.cainfo = "C:\xampp\php\cacert.pem.txt"
    
  3. 不要忘记重新启动 XAMPP(它在重新启动之前不会工作)

然后它就可以正常工作了!

【讨论】:

  • 为我工作,尽管我必须像 "C:\wamp64\bin\php\extras\cacert.perm" or "C:\wamp64\bin\php\php7.2.1\extras\cacert.perm" 一样准确地设置我的路径。更改您的 php ini 文件后,请务必重新启动您的网络服务器。
【解决方案5】:

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

在 Windows 7 上,根据您的安全设置 - 下载的文件可能会被阻止。见截图:

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

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

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

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

完成以上步骤后,通过XAMPP控制面板重启Apache,错误解决。

【讨论】:

    【解决方案6】:
    1. 从 (https://curl.haxx.se/ca/cacert.pem) 下载
    2. 将名称“cacert.pem”更改为“curl-ca-bundle.crt
    3. 在 'php.ini' 中,remove ';' 在以下行中: curl.cainfo="C:\xampp\apache\bin\curl-ca-bundle.crt"

    这对我有用。

    【讨论】:

      【解决方案7】:

      在 php.ini 文件中签出双引号: 如果你是从网上复制过去的,可能你弄错了双引号:

      “C:\xampp\php\cacert.pem.txt”

      而不是

      "C:\xampp\php\cacert.pem.txt"

      【讨论】:

      • 谢谢,如果你不提这个,我可能会花几个小时来弄清楚。
      【解决方案8】:

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

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

      这是source 链接。

      【讨论】:

        【解决方案9】:

        适用于窗户

        我在window 2008 上更新php 后遇到了同样的问题。突然我所有的php 代码都停止工作了。我做了什么,我打开了 php.ini 然后我找到了一行

        ;curl.cainfo =

        我变成了

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

        一切都正常了。您需要下载一个证书文件cert.pem 并将其放在您服务器上的任何位置,然后像我在 php.ini 中所做的那样更改行

        【讨论】:

          【解决方案10】:

          在 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"

          【讨论】:

            【解决方案11】:

            在您的 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 60 错误

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

            同时

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

            修复 cURL 77 错误。

            玩得开心!

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

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

            php -i | grep 'Configuration File'
            

            【讨论】:

              【解决方案12】:

              我阅读了我能找到的所有主题,而这一主题提供了缺失的部分。

              背景:我在尝试让 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 中

              例子:

              [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 堆栈,请重新启动它。您应该一切顺利。

              【讨论】:

                【解决方案13】:

                首先,您需要下载“curl.cainfo”文件,然后将其定位到C:\xampp\php\cacert.pem.txt

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

                curl.cainfo = C:\xampp\php\cacert.pem.txt 任何你想要的地方。

                第三次请重新启动您的 Apache 服务器 刷新您的本地主机页面,这应该可以正常工作。

                【讨论】:

                  【解决方案14】:

                  如果有人使用 Plesk 运行 Windows,他们会收到此错误。

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

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

                  为我修复。希望这可以帮助某人,某天,某处。

                  【讨论】:

                  • 而如果您在共享主机中使用Plesk,而无法访问PHP目录,则只能在每次使用前直接设置curl选项CURLOPT_CAINFO。
                  【解决方案15】:

                  我尝试过@mahesh-singh-chouhan、@omarsafwany、@LyleK 解决方案。但重复出现同样的错误。

                  之后,我更新了不带双引号的 php.ini 文件,并使用 .pem 扩展名,我成功地使用以下代码获得了所需的结果。

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

                  我还附上了截图。

                  请先尝试以上用户的建议,如果失败也使用这个。

                  感谢您的解决方案它为我创造了道路 @mahesh-singh-chouhan,@omarsafwany,@LyleK

                  【讨论】:

                    【解决方案16】:

                    我遇到了同样的问题,我尝试了这里和其他帖子中提到的所有解决方案,但都没有奏效。我试过了
                    1) 设置正确的文件权限(无效)
                    2) 更改文件扩展名(无效)


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

                    【讨论】:

                      【解决方案17】:

                      这对我有用

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

                      希望对某人有所帮助:)

                      【讨论】:

                      • 如果此代码回答了问题,请考虑在您的答案中添加一些解释代码的文本。这样一来,您就更有可能获得更多支持,并帮助提问者学习新知识。
                      【解决方案18】:

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

                      【讨论】:

                        【解决方案19】:

                        我在 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"

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

                        在我的情况下,我只是重新启动我的网站

                        【讨论】:

                          【解决方案20】:

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

                           $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;
                          

                          【讨论】:

                            【解决方案21】:

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

                            【讨论】:

                              【解决方案22】:

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

                              cURL 错误 77:设置证书验证位置时出错:CAfile: D:\XAMPP\apache\bin\curl-ca-bundle.crt CApath: none(参见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

                              【讨论】:

                                【解决方案23】:

                                如果和git有关:

                                git config --global http.sslverify "false"
                                

                                会解决问题的。

                                【讨论】:

                                • 对此响应投了反对票,禁用 SSL 绝不是一个好的解决方案。
                                • 它没有禁用 SSL,只有证书验证。虽然仍然不是一个好的解决方案!
                                猜你喜欢
                                • 2015-08-24
                                • 2018-10-25
                                • 2018-04-06
                                • 1970-01-01
                                • 1970-01-01
                                • 2019-08-27
                                • 2017-06-08
                                • 2017-09-22
                                • 2013-11-10
                                相关资源
                                最近更新 更多