Windows下cURL 60错误:无法获取本地颁发者证书

7

我已经在stackoverflow上尝试了很多可用的选项,但不幸的是目前对我都没有起作用。

问题始于composer安装。我的环境详细信息如下:

  1. 操作系统:Windows 7
  2. PHP版本:7.1.10,XAMPP版本
  3. 我正在运行MINGW64(与git v2.1.5一起安装)

    curl --version

    curl 7.56.1 (x86_64-w64-mingw32) libcurl/7.56.1 OpenSSL/1.0.2l (WinSSL) zlib/1.2.11 libidn2/2.0.4 libssh2/1.8.0 nghttp2/1.26.0

    Release-Date: 2017-10-23

    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp

    Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz TLS-SRP HTTP2 HTTPS-proxy MultiSSL Metalink

现在看来,CURLOpenSSL都已正确安装。当我执行composer require或install时,报告了以下错误: enter image description here

我搜索并发现这是本地证书的问题,因此我从https://curl.haxx.se/docs/caextract.html下载了证书/绑定,并将证书放置在C:\xampp\php\extras\ssl\下,并更改了PHP.ini

curl.cainfo="C:\xampp\apache\bin\curl-ca-bundle.crt" openssl.cafile="C:\xampp\php\extras\ssl\curl-ca-bundle.crt"

但这并没有起作用。然后我将我的证书放在C:\Windows\System32\curl-ca-bundle.crt下,并更改了ini,但仍然不起作用。

然后我从以下位置下载了cacert.pem

https://gist.github.com/VersatilityWerks/5719158/download

并重复使用pem文件使其正常工作。 但恐怕还是没有成功。有谁能帮我解决这里的问题吗?任何在这方面的帮助都将不胜感激。


在处理这个问题时,请确保您知道正确的代理并已在系统中进行配置。在我的情况下,安装和crt文件以及其他设置都是正确的。但是代理出了问题。因此,请也注意一下代理设置。 - SAM
2个回答

7

这是给使用Windows的用户,使用curl-7.57.0-win64-mingw或类似版本的提示。

我已经在另一个帖子中分享了这个方法,但我认为Windows用户可能会遇到此问题,我的答案可能有帮助。因此,分享一下逐步过程。

这个错误基本上意味着,curl无法验证目标URI的证书。如果您信任证书颁发机构(CA),则可以将其添加到受信任证书列表中(例如,这是一个本地的IIS证书,并且您信任它用于开发目的)。

为此,请浏览URI(例如,使用Chrome)并按照以下步骤操作

  1. 右键单击地址栏上的HTTPS安全锁图标
  2. 点击certificate,它将打开一个带有证书详细信息的窗口
  3. 转到“Certification Path”选项卡
  4. 单击ROOT证书
  5. 单击View Certificate,它将打开另一个证书窗口
  6. 进入Details选项卡
  7. 点击Copy to File...按钮,它将打开导出向导
  8. 点击Next
  9. 选择“Base-64编码的X.509 (.CER)”
  10. 点击Next
  11. 给它一个易记的友好名称,例如“MyDomainX.cer”(浏览到所需的目录)并保存
  12. 点击Next
  13. 点击Finish,将保存证书文件

那么我们做了什么?

我们基本上保存了期望站点(我们实际上信任的)的根证书作为本地文件。下一步该怎么办?

将该证书添加到受信任证书列表中

  1. 现在打开这个.cer文件并复制内容(包括-----BEGIN CERTIFICATE----------END CERTIFICATE-----
  2. 现在转到curl.exe保存的目录,例如:C:\SomeFolder\curl-7.57.0-win64-mingw\bin
  3. 使用文本编辑器打开curl-ca-bundle.crt文件(右键单击并选择打开方式...)
  4. 追加被复制证书的文本到文件末尾。保存

我们现在做了什么?

我们将证书(内容)添加到了curl的主证书束中。因此,现在curl将识别此证书并允许该域。

现在您的命令应该可以在curl上正常执行。


希望能够在下投票的原因上留下一些评论,谢谢。 - Arghya C

4

我把这个帖子发布在这里以备后用,因为我已经花了过去的两个小时来处理这个问题。 注意:仅在Windows上测试。

  1. 确保您安装了包含ssl的curl版本(最新的exe安装程序已经包含了它)
  2. http://curl.haxx.se/docs/caextract.html下载cacert.pem文件
  3. 将cacert.pem重命名为curl-ca-bundle.crt
  4. 将cacert.pem文件移动到curl.exe目录中。

完成。


非常好。谢谢。 - Enrique
现在看来似乎没有什么用了,因为最近的Windows压缩包已经包含了这个文件。 - undefined

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