Windows,cURL 60 无法获取本地颁发者证书

标签 windows curl composer-php php-7

我已经在 stackoverflow 上尝试了很多选项来解决这个问题,不幸的是到目前为止没有任何效果。

它从 composer 安装开始。下面列出了我的环境详细信息:

  1. 操作系统:Windows 7
  2. PHP V 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 or install 时,报错如下: enter image description here

我搜索并发现是本地证书问题,所以我从 https://curl.haxx.se/docs/caextract.html 下载了证书/ bundle ,将证书放在 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 文件一起使用。 但是,恐怕这里仍然没有成功。 谁能帮我这里发生了什么问题?在这个方向上的任何帮助都是很大的 赞赏。

最佳答案

这适用于 Windows 用户,使用 curl-7.57.0-win64-mingw 或类似版本。

我已经在另一个线程上分享过这个问题,但我认为 Windows 用户可能会偶然发现这个问题,而我的回答可能会有所帮助。因此,分享分步过程。

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

为此,浏览 URI(例如在 Chrome 上)并按照步骤操作

  1. 右键单击地址栏上的 HTTPS 安全挂锁 🔒 图标
  2. 点击certificate,它会打开一个包含证书详细信息的窗口
  3. 转到“认证路径”标签
  4. 点击ROOT证书
  5. 点击View Certificate,会打开另一个证书窗口
  6. 转到详细信息标签
  7. 点击复制到文件...按钮,它会打开导出向导
  8. 点击下一步
  9. 选择“Base-64 编码的 X.509 (.CER)”
  10. 点击下一步
  11. 提供一个您可以记住的友好名称,例如'MyDomainX.cer'(浏览到​​所需目录)并保存
  12. 点击下一步
  13. 点击Finish,保存证书文件

那么我们做了什么?

我们基本上将所需站点(我们实际上信任的站点)的根证书保存为本地文件。我们接下来做什么?

将该证书添加到可信证书列表

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

我们现在做了什么?

我们将证书(内容)添加到 curl 的主证书包中。所以现在 curl 将识别此证书并允许该域。

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

关于Windows,cURL 60 无法获取本地颁发者证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47434347/

相关文章:

c++ - 仅在 Windows 中的 JsonCpp 模糊重载

c++ - 从CreateProcess调用c中的msi文件

c# - Windows/.NET 的 System.Drawing.Save(Stream, ImageFormat) 中的错误。生成损坏的 PNG

php - Symfony Composer 安装 - 未捕获 Symfony\Component\Debug\Exception\ClassNotFoundException : Attempted to load class "SensioGeneratorBundle"

php - Composer laravel 创建项目

php - 我无法在 Ubuntu 16.04 中安装 php composer

java - 强制使用 "java -version:<value>"运行 Java 最低版本在 Windows 上不起作用

c - 压测服务器: starting requests at given subsecond timestamps

php - 如何阻止 cURL 使我的 PHP session 死锁?

c++ - libcurl 在下载文件时输出额外的尾随字节