我正试图使composer在使用代理的远程Windows机器上工作,但每当执行composer install/update时,都会遇到以下错误:
[Composer\Downloader\TransportException] curl错误 60,下载https://flex.symfony.com/versions.json时出错: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 下载时出现 curl 错误 28: 操作超时,已接收到 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
我看了很多帖子和教程,但没有一个答案对我有用。(一些只是关于curl及其选项切换关检查的,但这对composer无效)下面是我尝试过的:
- 从http://curl.haxx.se/ca/cacert.pem或https://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中设置了一个存储库,并明确为该存储库设置了认证文件,所以我也尝试了并将以下内容添加到我的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 错误。(不知道 "versions.json" 的证书错误先加载还是 "packages.json" 先加载是否有影响,也不确定这个错误是否是一个 "好" 迹象。)
这个试错之旅已经持续了几天,我无计可施,所以任何帮助都将不胜感激!