ComposerCurl错误60:SSL证书问题:无法获取本地颁发者证书
我正在尝试让 Composer 在使用代理的远程 Windows 机器上工作,但在执行 Composer 安装/更新时总是出现此错误:
[ComposerDownloaderTransportException] 下载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" %*
显然需要设置代理,如果我删除该行,则错误变为:
[ComposerDownloaderTransportException] 下载https://flex.symfony.com/versions.json 时出现 curl 错误 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 FilesPHPcurrentphp.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 并且它是关闭证书检查的选项,但这对作曲家不起作用)。这是我尝试过的:
- 从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 FilesPHPcacert.pem" - 将 pem 文件移动到不同的目录以确保没有 Windows 权限会使其无法访问(我还将文件及其目录设置为所有用户都可以访问,以确保)
- 用于
php -r "print_r(openssl_get_cert_locations());"找出默认的证书文件位置(它是“C:Program FilesCommon FilesSSL”),还将证书文件保存在那里
所有这些都不起作用,错误仍然相同。然后我找到了一个帖子,它在 composer.json 中设置了一个存储库并明确地为该存储库设置了证书文件,所以我也尝试了它并将其添加到我的 composer.json 中:
{
"repositories": [{
"type": "composer",
"url": "https://flex.symfony.com",
"options" : {
"ssl" : {
"cafile" : "cacert.pem"
}
}
}]
}
文件“cacert.pem”与我的 composer.json 位于同一目录中,现在错误是这样的:
[ComposerDownloaderTransportException] 无法下载“https://flex.symfony.com/packages.json”文件 (HTTP/2 404)
这并不奇怪,因为尝试通过浏览器访问“https://flex.symfony.com/packages.json”也会给我一个 404。(不知道这是否突然有所不同“ package.json”无法加载,而证书错误抱怨“versions.json”,不知道先加载哪个,以及此错误是否是“好”迹象。)
这个反复试验的旅程已经持续了好几天,我没有想法,所以感谢任何帮助!
回答
我不知道您的问题是否与我刚刚遇到的问题相同。但我通过在以下位置执行它来解决它cmd:
composer config -g -- disable-tls false
反正我在用wamp。