Composer Curl 错误 60:SSL 证书问题:无法获取本地颁发者证书

新手上路,请多包涵

我试图让 composer 在使用代理的远程 Windows 机器上工作,但在执行 composer 安装/更新时我总是会收到此错误:

[Composer\Downloader\TransportException] 下载 https://flex.symfony.com/versions.json 时出现 curl 错误 60:SSL 证书问题:无法获取本地颁发者证书

这是我的 composer.bat:

 @echo OFF
:: in case DelayedExpansion is on and a path contains !
setlocal DISABLEDELAYEDEXPANSION
set HTTP_PROXY=<proxyurl>
php "%~dp0composer.phar" %*

显然需要设置代理,如果我删除该行,错误就变成了这样:

[Composer\Downloader\TransportException] 下载 https://flex.symfony.com/versions.json 时出现卷曲错误 28:操作在 10000 毫秒后超时,收到 0 个字节中的 0 个

composer diag 给我这个(代理集):

 Checking composer.json: OK
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking HTTP proxy: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking pubkeys:
Tags Public Key Fingerprint: 57815BA2 7E54DC31 7ECC7CC5 573090D0  87719BA6 8F3BB723 4E5D42D0 84A14642
Dev Public Key Fingerprint: 4AC45767 E5EC2265 2F0C1167 CBBB8A2B  0C708369 153E328C AD90147D AFE50952
OK
Checking composer version: OK
Composer version: 2.0.9
PHP version: 7.4.7
PHP binary path: C:\Program Files\PHP\current\php.exe
OpenSSL version: OpenSSL 1.1.1g  21 Apr 2020
cURL version: 7.69.1 libz 1.2.11 ssl OpenSSL/1.1.1g
zip: extension present, unzip not available

我看过很多帖子和教程,但没有一个答案对我有用。 (有些只是关于卷曲,它是关闭证书检查的选项,但这对作曲家不起作用)。这是我尝试过的:

  • http://curl.haxx.se/ca/cacert.pemhttps://curl.se/docs/caextract.html 下载 cacert.pem即将发生)
  • 将文件保存在本地
  • 在 php.ini 中激活 openssl
  • 编辑 php.ini 并为“curl.cainfo”和“openssl.cafile”添加证书文件的路径(根据一些不同的帖子,所以我尝试了两者),使用完整路径和引号,像这样: curl.cainfo="C:\Program Files\PHP\cacert.pem"
  • 将 pem 文件移动到不同的目录以确保没有 Windows 权限会使其无法访问(我还将文件及其目录设置为所有用户都可以访问以确保)
  • 使用 php -r "print_r(openssl_get_cert_locations());" 找出默认的证书文件位置(它是“C:\Program Files\Common Files\SSL”),还将证书文件保存在那里

所有这些都不起作用,错误仍然存在。然后我发现了一篇文章,它在 composer.json 中设置了一个存储库,并明确地为该 repo 设置了证书文件,所以我也尝试了一下并将其添加到我的 composer.json 中:

 {
  "repositories": [{
    "type": "composer",
    "url": "https://flex.symfony.com",
    "options" : {
      "ssl" : {
        "cafile" : "cacert.pem"
      }
    }
  }]
}

文件“cacert.pem”与我的 composer.json 在同一目录中,现在错误是这样的:

[Composer\Downloader\TransportException] 无法下载“https://flex.symfony.com/packages.json”文件 (HTTP/2 404)

这并不奇怪,因为尝试通过浏览器访问“https://flex.symfony.com/packages.json”也给了我一个 404。(不知道它是否突然有所不同“ packages.json”无法加载,而 cert-error 抱怨“versions.json”,不知道哪个先加载,如果这个错误是一个“好”的迹象。)

这个反复试验的旅程已经持续了好几天,我没有想法,所以感谢任何帮助!

原文由 Select0r 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

进一步的研究使我找到了代理,即 ZScaler,这是问题所在。如 这篇 文章所述,ZScaler 拦截 SSL 流量并使用其自己的不受信任的证书对其进行重新加密,因此 Composer(或任何其他通过 https 访问站点的程序)将抱怨上述错误“无法获得本地发行者”证书”。

因此,解决方案必须是让“ZScaler Intermediate Root CA”在服务器上得到信任。 (由于公司政策,我不能自己做,但任何正在寻找上述问题解决方案的人现在可能都有另一个提示。)

原文由 Select0r 发布,翻译遵循 CC BY-SA 4.0 许可协议

我不知道您的问题是否与我刚刚遇到的问题相同。但我通过在 cmd 中执行这个解决了它:

 composer config -g -- disable-tls false

无论如何我都在使用wamp。

原文由 Daddi Al Amoudi 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏