Composer报SSL证书过期错是因系统或PHP的CA证书未更新,需更新系统CA包、修复php.ini中curl.cainfo路径、或升级Composer至2.5.8+;禁用SSL验证仅限临时调试。

composer install 报错 “SSL certificate problem: certificate has expired”
这是 OpenSSL 信任的根证书列表里缺少 Let’s Encrypt 的新根证书(ISRG Root X1),而旧的 DST Root CA X3 已在 2021 年 9 月过期。Composer 默认走系统级 SSL 验证,一旦系统 OpenSSL 版本老旧或 CA 包未更新,就会卡在这儿。
别急着关 SSL 验证——那是饮鸩止渴。优先走安全路径:
- Linux/macOS:运行
sudo update-ca-certificates(Debian/Ubuntu)或sudo trust extract --system(Fedora/RHEL),确保系统 CA 包最新 - macOS 若用 Homebrew 安装的 PHP,检查是否用了自带的
curl:运行which curl,如果是/usr/bin/curl,它可能仍依赖过期系统证书;换成 Homebrew 的curl(brew install curl,再用export PATH="/opt/homebrew/opt/curl/bin:$PATH") - Windows 用户若用 WSL,同样按 Linux 方式更新 CA;若用原生 Windows Composer,升级到 Composer 2.5.8+(内置了 ISRG 根证书),执行
composer self-update
临时绕过但不推荐的方案:禁用 SSL 验证
仅限调试、CI 环境或完全离线测试时用,生产环境绝对不要留着。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局关闭(危险):
composer config -g secure-http false—— 这会让所有仓库走 HTTP,中间人攻击风险拉满 - 单次跳过(稍好一点):
composer install --no-secure-http,但只对当前命令生效,且部分插件或自定义 repo 可能不遵守 - 更隐蔽的坑:
export COMPOSER_NO_SSL=1在 shell 中设置后,所有后续composer命令都会失效验证,容易忘记清理
PHP cURL 扩展本身证书路径不对
Composer 底层用 PHP 的 cURL 发请求,而 cURL 会读取 curl.cainfo 或 openssl.cafile 指定的证书文件。如果这个路径指向一个过期或空的 PEM 文件,就必然报错。
- 查当前 PHP 使用的证书路径:
php -i | grep -E 'curl.cainfo|openssl.cafile' - 常见错误路径:
/etc/ssl/certs/ca-certificates.crt(旧版 Ubuntu 可能没自动更新)、C:\xampp\php\extras\ssl\cacert.pem(XAMPP 自带的已多年未更新) - 修复方法:下载最新 Mozilla CA 包:
curl -o /path/to/cacert.pem https://curl.se/ca/cacert.pem,然后在php.ini中设curl.cainfo = "/path/to/cacert.pem",重启 PHP
国内镜像源 + SSL 验证失败的组合问题
用阿里云、腾讯云等镜像源时,如果镜像站启用了 HTTPS 但证书链配置不全(比如缺中间证书),也会触发同类报错——不是证书过期,而是证书链不完整。
- 验证镜像是否真有问题:
curl -v https://mirrors.aliyun.com/composer/,看输出末尾有没有* SSL certificate verify ok. - 阿里云镜像已修复,但某些小众镜像或自建镜像可能仍存在链路问题;此时切回官方源(
composer config -g repo.packagist composer https://packagist.org)可快速定位是不是镜像的问题 - 注意:即使开了镜像,Composer 仍会向 packagist.org 请求元数据(如
packages.json),所以官方源的 SSL 问题依然会影响整体流程
最常被忽略的一点:你以为更新了系统证书,但 PHP 是静态链接 OpenSSL 的(尤其 Windows xampp、MAMP、Docker 中的 alpine 镜像),它根本不读系统 CA,只认自己编译时绑定的或 php.ini 指定的 PEM 文件。修完系统,一定要确认 PHP 层也同步到位。

















