切换PHP 8.1后Composer更新/安装报curl error 60问题求助
解决PHP 8.1切换后Composer在公司代理环境下的SSL证书错误(curl error 60)
问题描述
切换PHP版本至8.1后,在公司代理环境执行Composer更新项目时,出现以下错误:
[Composer\Downloader\TransportException] curl error 60 while downloading https://repo.packagist.org/packages.json: SSL certificate problem: self signed certificate in certificate chain
已完成的排查操作:
- Apache和PHP均已安装SSL
- php.ini中已配置最新cacert.pem路径至
curl.cainfo和openssl.cafile,且两行配置均已取消注释 - 环境变量中已设置http和https代理
- 已配置Composer公钥
- 已重启电脑、Apache及PHP
- 已清除Composer缓存
异常现象:
composer diagnose显示http请求正常返回200,但所有https请求均返回error 60- 直接执行
curl https://repo.packagist.org/packages.json可正常获取数据,npm、git在同一代理环境下运行正常 - 尝试禁用TLS、回退PHP版本,问题依旧
composer diagnose 部分输出
Checking platform settings: OK Checking git settings: Executing command (CWD): git config color.ui Executing command (CWD): git --version OK git version 2.29.1 Checking http connectivity to packagist: Downloading http://repo.packagist.org/packages.json using proxy (http://10.96.210.50:8080) [200] http://repo.packagist.org/packages.json OK Checking https connectivity to packagist: Downloading https://repo.packagist.org/packages.json using proxy (http://10.96.210.50:8080) FAIL [Composer\Downloader\TransportException] curl error 60 while downloading https://repo.packagist.org/packages.json: SSL certificate problem: self signed certificate in certificate chain Checking HTTP proxy: Downloading https://repo.packagist.org/packages.json using proxy (http://10.96.210.50:8080) FAIL [Composer\Downloader\TransportException] curl error 60 while downloading https://repo.packagist.org/packages.json: SSL certificate problem: self signed certificate in certificate chain Checking github.com rate limit: Downloading https://api.github.com/rate_limit using proxy (http://10.96.210.50:8080) FAIL [Composer\Downloader\TransportException] curl error 60 while downloading https://api.github.com/rate_limit: SSL certificate problem: self signed certificate in certificate chain 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: Downloading https://getcomposer.org/versions using proxy (http://10.96.210.50:8080) FAIL [Composer\Downloader\TransportException] curl error 60 while downloading https://getcomposer.org/versions: SSL certificate problem: self signed certificate in certificate chain Composer version: 2.5.1 PHP version: 8.1.0 PHP binary path: C:\wamp64new\bin\php\php8.1.0\php.exe OpenSSL version: OpenSSL 1.1.1l 24 Aug 2021 cURL version: 7.77.0 libz 1.2.11 ssl OpenSSL/1.1.1l zip: extension present, unzip not available, 7-Zip present (7z)
解决方案
1. 确认PHP CLI使用的php.ini文件
执行以下命令查看当前PHP CLI加载的配置文件路径:
php --ini
检查输出中的Loaded Configuration File是否为你修改的php.ini。WAMP环境下,Apache和CLI版本的PHP可能使用不同的配置文件,很多人会误改Apache的配置而忽略CLI版本。
2. 追加公司代理自签名证书到cacert.pem
公司代理的自签名证书不在默认信任链中,需手动添加:
- 从IT部门获取或通过浏览器导出公司代理的SSL证书
- 打开你配置的cacert.pem文件,将导出的证书内容追加到文件末尾
- 保存后无需重启Apache,直接重新执行Composer命令即可
3. 为Composer单独指定代理证书路径
若不想修改全局cacert.pem,可通过Composer配置指定证书:
执行全局配置命令:
composer config -g cafile "C:\path\to\your\company-cert.pem"
或手动修改全局配置文件(%APPDATA%\Composer\config.json),添加:
{ "config": { "cafile": "C:\\path\\to\\your\\company-cert.pem" } }
4. 确认Composer使用的PHP版本
执行以下命令检查Composer关联的PHP版本:
composer -V
若显示的不是8.1.0,手动指定PHP路径执行Composer:
C:\wamp64new\bin\php\php8.1.0\php.exe composer.phar update
5. 临时绕过SSL验证(仅应急用,不推荐生产环境)
如果上述方法均无效,可临时关闭Composer的SSL验证:
composer config -g disable-tls true
或执行命令时添加参数:
composer update --disable-tls
注意:此方法会带来安全风险,仅作为临时测试方案。
内容的提问来源于stack exchange,提问作者n_ivkovic021
相关产品推荐
相关产品推荐

