Composer Curl 错误 60:SSL 证书问题:无法获取本地颁发者证书
Composer Curl error 60: SSL certificate problem: unable to get local issuer certificate
我正在尝试让 composer 在使用代理的远程 Windows 机器上工作,但在执行 composer install/update:[=20= 时我总是会遇到此错误]
[Composer\Downloader\TransportException] curl error 60 while
downloading https://flex.symfony.com/versions.json: SSL certificate
problem: unable to get local issuer certificate
这是我的 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] curl error 28 while
downloading https://flex.symfony.com/versions.json: Operation timed
out after 10000 milliseconds with 0 out of 0 bytes received
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
我看过很多 post 和教程,但 none 的答案对我有用。 (有些只是关于卷曲,它是关闭证书检查的选项,但这对作曲家不起作用)。这是我尝试过的:
- 从 http://curl.haxx.se/ca/cacert.pem or https://curl.se/docs/caextract.html 下载 cacert.pem(没有复制和粘贴,因为有些人说编辑文件会损坏它 - 然而这应该会发生)
- 在本地保存文件
- 在 php.ini
中激活了 openssl
- 编辑 php.ini 并为“curl.cainfo”和“openssl.cafile”添加了证书文件的路径(根据一些 post一个区别,所以我都试过了),使用完整路径和引号,如下所示:
curl.cainfo="C:\Program Files\PHP\cacert.pem"
- 将 pem 文件移动到不同的目录以确保没有 Windows 权限会使其无法访问(我还设置了文件及其目录以确保所有用户都可以访问)
- 使用
php -r "print_r(openssl_get_cert_locations());"
找出默认的证书文件位置(它是“C:\Program Files\Common Files\SSL”),还将证书文件保存在那里
所有这些都不起作用,错误仍然存在。
然后我找到了一个 post,它在 composer.json 中设置了一个存储库,并明确地为该存储库设置了证书文件,所以我也尝试了它并将其添加到我的 composer.json:
{
"repositories": [{
"type": "composer",
"url": "https://flex.symfony.com",
"options" : {
"ssl" : {
"cafile" : "cacert.pem"
}
}
}]
}
文件“cacert.pem”和我的composer.json在同一个目录下,现在错误是这样的:
[Composer\Downloader\TransportException] The
"https://flex.symfony.com/packages.json" file could not be downloaded
(HTTP/2 404 )
这并不奇怪,因为尝试通过浏览器访问“https://flex.symfony.com/packages.json”也会给我一个 404。(不要不知道突然无法加载“packages.json”是否有所不同,而证书错误抱怨“versions.json”,不知道先加载哪个,如果这个错误是一个“好”的迹象。)
这个反复试验的旅程已经进行了好几天,我没有想法,所以非常感谢任何帮助!
进一步的研究使我找到了代理,即 ZScaler,这是问题所在。如 this post 所述,ZScaler 拦截 SSL 流量并使用其自己的不受信任的证书对其重新加密,因此 Composer(或任何其他通过 https 访问站点的程序)将抱怨上述错误它是“无法获得本地颁发者证书”。
所以解决方案必须是让“ZScaler 中间根 CA”在服务器上得到信任。 (由于公司政策,我不能自己做,但任何正在寻找上述问题解决方案的人现在可能已经有了另一个提示。)
我不知道你的问题是否和我刚遇到的问题一样。但我通过在 cmd
:
中执行这个解决了它
composer config -g -- disable-tls false
反正我在用 wamp。
是的,如果系统未连接到公司为安全而安装的 Zscaler,有时会遇到此问题。连接 Zscaler 并重新 运行 命令。问题将得到解决。
在使用 composer config -g secure-http false
并使用 composer clearcache
清除我的作曲家缓存后,使用 WAMP 服务器解决了我的问题。
看来你走错路了
如果您使用的是 PHP 版本 php7.4.21
正确:Applications/MAMP/bin/php/php7.4.21
错误:Applications/MAMP/config/php7.4.21
https://asset-packagist.org could not be fully loaded (curl error 60
while downloading https://asset-packagist.org/packages.json: SSL
certificate problem: certificate has expired), package information was
loaded from the local cache and may be out of date
我在 composer install
Yii2
项目操作系统 Windows
和 Wamp
上遇到这个问题
我在 Wamp
上使用此视频 SSL certificate 更新了证书
最后仍然面临同样的问题我使用命令 composer self-update
更新作曲家一切正常我将作曲家版本从 2.1.8
更新到 2.2.7
更新密钥使用:
composer self-update --update-keys
然后按照说明进行操作(复制并粘贴 https://composer.github.io/pubkeys.html 中的密钥)
如果您使用 symfony/flex 早于 1.17.1 的版本:
composer show symfony/flex
然后你需要更新它:
composer update symfony/flex --no-plugins --no-scripts
我正在尝试让 composer 在使用代理的远程 Windows 机器上工作,但在执行 composer install/update:[=20= 时我总是会遇到此错误]
[Composer\Downloader\TransportException] curl error 60 while downloading https://flex.symfony.com/versions.json: SSL certificate problem: unable to get local issuer certificate
这是我的 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] curl error 28 while downloading https://flex.symfony.com/versions.json: Operation timed out after 10000 milliseconds with 0 out of 0 bytes received
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
我看过很多 post 和教程,但 none 的答案对我有用。 (有些只是关于卷曲,它是关闭证书检查的选项,但这对作曲家不起作用)。这是我尝试过的:
- 从 http://curl.haxx.se/ca/cacert.pem or https://curl.se/docs/caextract.html 下载 cacert.pem(没有复制和粘贴,因为有些人说编辑文件会损坏它 - 然而这应该会发生)
- 在本地保存文件
- 在 php.ini 中激活了 openssl
- 编辑 php.ini 并为“curl.cainfo”和“openssl.cafile”添加了证书文件的路径(根据一些 post一个区别,所以我都试过了),使用完整路径和引号,如下所示:
curl.cainfo="C:\Program Files\PHP\cacert.pem"
- 将 pem 文件移动到不同的目录以确保没有 Windows 权限会使其无法访问(我还设置了文件及其目录以确保所有用户都可以访问)
- 使用
php -r "print_r(openssl_get_cert_locations());"
找出默认的证书文件位置(它是“C:\Program Files\Common Files\SSL”),还将证书文件保存在那里
所有这些都不起作用,错误仍然存在。 然后我找到了一个 post,它在 composer.json 中设置了一个存储库,并明确地为该存储库设置了证书文件,所以我也尝试了它并将其添加到我的 composer.json:
{
"repositories": [{
"type": "composer",
"url": "https://flex.symfony.com",
"options" : {
"ssl" : {
"cafile" : "cacert.pem"
}
}
}]
}
文件“cacert.pem”和我的composer.json在同一个目录下,现在错误是这样的:
[Composer\Downloader\TransportException] The "https://flex.symfony.com/packages.json" file could not be downloaded (HTTP/2 404 )
这并不奇怪,因为尝试通过浏览器访问“https://flex.symfony.com/packages.json”也会给我一个 404。(不要不知道突然无法加载“packages.json”是否有所不同,而证书错误抱怨“versions.json”,不知道先加载哪个,如果这个错误是一个“好”的迹象。)
这个反复试验的旅程已经进行了好几天,我没有想法,所以非常感谢任何帮助!
进一步的研究使我找到了代理,即 ZScaler,这是问题所在。如 this post 所述,ZScaler 拦截 SSL 流量并使用其自己的不受信任的证书对其重新加密,因此 Composer(或任何其他通过 https 访问站点的程序)将抱怨上述错误它是“无法获得本地颁发者证书”。
所以解决方案必须是让“ZScaler 中间根 CA”在服务器上得到信任。 (由于公司政策,我不能自己做,但任何正在寻找上述问题解决方案的人现在可能已经有了另一个提示。)
我不知道你的问题是否和我刚遇到的问题一样。但我通过在 cmd
:
composer config -g -- disable-tls false
反正我在用 wamp。
是的,如果系统未连接到公司为安全而安装的 Zscaler,有时会遇到此问题。连接 Zscaler 并重新 运行 命令。问题将得到解决。
在使用 composer config -g secure-http false
并使用 composer clearcache
清除我的作曲家缓存后,使用 WAMP 服务器解决了我的问题。
看来你走错路了
如果您使用的是 PHP 版本 php7.4.21
正确:Applications/MAMP/bin/php/php7.4.21
错误:Applications/MAMP/config/php7.4.21
https://asset-packagist.org could not be fully loaded (curl error 60 while downloading https://asset-packagist.org/packages.json: SSL certificate problem: certificate has expired), package information was loaded from the local cache and may be out of date
我在 composer install
Yii2
项目操作系统 Windows
和 Wamp
上遇到这个问题
我在 Wamp
上使用此视频 SSL certificate 更新了证书
最后仍然面临同样的问题我使用命令 composer self-update
更新作曲家一切正常我将作曲家版本从 2.1.8
更新到 2.2.7
更新密钥使用:
composer self-update --update-keys
然后按照说明进行操作(复制并粘贴 https://composer.github.io/pubkeys.html 中的密钥)
如果您使用 symfony/flex 早于 1.17.1 的版本:
composer show symfony/flex
然后你需要更新它:
composer update symfony/flex --no-plugins --no-scripts