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

43

我在Laravel 5中使用socialite设置Facebook登录。我一直按照说明认真操作,但最后遇到了以下错误:

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

所以我找到了这个答案来解决它,确实通过了,但是后来我遇到了这个错误。

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

有任何想法是什么导致了这个错误?!以及如何修复它?!


你使用的是真正的SSL证书还是自签名证书?/Applications/XAMPP/xamppfiles/cacert.pem文件存在吗? - detheridge02
@detheridge02 我按照回答中提到的方式下载了文件,所以它在路径 /Applications/Xampp/xamppfiles 中。 - omarsafwany
你需要输入绝对路径而不是相对路径。 - Mourad El Aomari
请注意,如果设置了open_basedir,请确保其包括包含cacert.pem的目录。 - Frank Forte
1
你确定文件名是 cacert.pem 还是 cacert.perm?正确检查文件扩展名,并确保在你的环境证书路径中有这个文件,通常位于 php.ini 文件中的 curl.cainfo = "C:/wamp64/bin/php/php7.2.10/extras/ssl/cacert.pem"。 - Akah
24个回答

38

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

我的设置:

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

我将其改为什么:

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

希望这能有所帮助。


仍然无法工作。我的文件名只是“cacert.pem”,没有“.txt”扩展名。 - omarsafwany
@omarsafwany,也许你的文件扩展名被设置为隐藏了。证书基本上是一个文本文件,因此应该在其绝对路径中添加 .txt 扩展名。同时重启你的 Apache 服务器以使这些更改生效。 - Vincent Edward Gedaria Binua
可以尝试将.pem文件移动到'bin/php/version-X.X/ext'文件夹中。 - DPP
对我来说,这是一个典型的 PEBKAC 问题 - 当我配置(即复制并粘贴)“C:\xampp...”时,实际的 Xampp 安装路径应该是“C:\Program Files\xampp...”。 - mbirth
我必须承认,下载的pem文件被转换为一个带有.txt扩展名的文件。当我将其更改为cacert.pem.txt时,我的文件出奇地工作了。我已经注意到这一点,即文件类型以文本格式保存,但我不确定是否使用.txt扩展名,最终尝试了一下,结果成功了。 - Charmie
在我的情况下,这是相对路径。您必须指定完整路径。如果您需要从代码中相对于路径,则可以使用“dirname(__FILE__).'/../cacert.pem'”动态确定路径。 - Arie

31

https://curl.haxx.se/ca/cacert.pem下载cacert.pem文件,并将其放置于c:\xampp\php\cacert.pem路径下。

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

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


1
帮助我让GuzzleHttp PHP包正常工作。谢谢,伙计。 - Ales
1
我不得不在php.ini中设置openssl.cafile,但这对我起作用了。 - HartleySan
不起作用,我拥有的文字比你这里写的多。 - Sylar

24

5
谢谢。 "改名" 解决了我的问题。愿上帝保佑您。 - Trisno Raynaldy

10

我遇到了一些问题,按照错误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,错误得到解决。


8
  1. 下载 (https://curl.haxx.se/ca/cacert.pem)
  2. 将名字 'cacert.pem' 改为 'curl-ca-bundle.crt'
    (之后,将其移动到路径 'C:\xampp\apache\bin')
  3. 在 'php.ini' 中,删除 下面这行的 ';': curl.cainfo="C:\xampp\apache\bin\curl-ca-bundle.crt"

这对我有用。


1
你需要提到该文件应放置在 "C:\xampp\apache\bin" 路径下。 - Mohsin Khan

8
  1. Save this certificate (https://curl.haxx.se/ca/cacert.pem) as cacert.pem.txt in C:\xampp\php
  2. Add to php.ini:

    curl.cainfo = "C:\xampp\php\cacert.pem.txt"
    
  3. Don't forget to restart XAMPP (it won't work until it restarts)

然后它就正常工作了!


虽然我必须准确设置我的路径,例如"C:\wamp64\bin\php\extras\cacert.perm" 或 "C:\wamp64\bin\php\php7.2.1\extras\cacert.perm",但这对我很有效。在更改php ini文件后,请务必重新启动您的Web服务器。 - Akah

6

在php.ini文件中检查双引号:

如果你是从网上复制粘贴的,可能会出现错误的双引号:

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

应该是

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


1
谢谢,如果你没提到这个,我可能会花几个小时来弄清楚。 - Rafael D'Arrigo
哦,伙计,这对我也起作用了——我的最后一个引用出现错误。我不相信我会想到这个。你是救命恩人——谢谢! - bikz
是的!!!就是这个!该死 :) - Andrew

4
在你的php.ini文件中,你还应该更新你的。
;openssl.cafile 

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

;curl.cainfo

在此之前和之后看一下我的东西

;curl.cainfo =

;openssl.cafile=

to

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错误。

祝愉快!

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

想要找到php.ini文件的人,请在cd进入应用程序后使用此命令。

php -i | grep 'Configuration File'

3

对于Windows系统

当我在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中所做的那样更改该行。


2
您需要用另一个这里的证书替换现有证书。之后:
  • 提取并将其添加到xampp\php\ext
  • 打开xampp\php\php.ini
  • 在文件末尾添加此行curl.cainfo='第一步的位置'
  • 重新启动,现在应该可以工作了。
这是链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接