You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:21:07