Composer install 报 SSL certificate problem 错误是 OpenSSL 验证 HTTPS 证书失败所致,主因包括公司代理、过期 CA 证书或系统时间偏差超 5 分钟;应优先换国内镜像源(如阿里云)、更新根证书,禁用 TLS 仅限临时测试且存在安全风险。

composer install 报错 SSL certificate problem
这是 OpenSSL 验证远程 HTTPS 证书失败,常见于公司代理、老旧 CA 证书、或系统时间严重偏差。不是 Composer 本身问题,而是 PHP 的 cURL 或 openssl 层面拦截了不信任的证书链。
- 先检查系统时间:
date,误差超过 5 分钟就可能触发证书过期误判 - 运行
php -r "print_r(openssl_get_cert_locations());"看 PHP 用的是哪个cafile,确认该文件存在且非空 - 若用 Wamp/Xampp,常因自带 OpenSSL 版本太老,建议升级或换用官方 PHP 二进制包
禁用 SSL 验证(仅限开发/测试环境)
禁用验证是临时绕过手段,不能上生产。核心是让 Composer 跳过 cURL 的证书校验,有两处生效点:
- 全局配置(影响所有项目):
composer config -g secure-http false—— 这只是关 HTTPS 强制要求,不解决证书错误 - 真正禁用 SSL 校验需改 cURL 行为:
composer config -g cafile "",再配合环境变量export COMPOSER_DISABLE_TLS=1(Linux/macOS)或set COMPOSER_DISABLE_TLS=1(Windows) - 更直接的方式:在命令前加
curl -k不适用,因为 Composer 不走 shell curl;必须用COMPOSER_DISABLE_TLS=1 composer install
推荐做法:换源 + 更新根证书
国内用户多数卡在 packagist.org 走不通,而非真证书异常。优先换镜像源,比禁用 TLS 安全又稳定。
- 阿里云镜像(已支持 HTTPS 且证书有效):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 腾讯云镜像:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 换源后仍报 SSL 错,说明本地 OpenSSL 根证书库过期,Linux 可更新
ca-certificates包,macOS 用brew install ca-certificates并设置php.ini中openssl.cafile=/usr/local/etc/openssl/cert.pem
为什么不要长期设 COMPOSER_DISABLE_TLS=1
这个环境变量会让 Composer 所有 HTTPS 请求降级为 HTTP,中间人攻击风险直线上升——尤其当你装的包含私有仓库或自建 Satis 服务时,账号 Token、API 密钥可能明文泄露。
-
COMPOSER_DISABLE_TLS=1不只跳过证书验证,还强制关闭 TLS 加密 - 某些企业防火墙会拦截纯 HTTP 的 packagist 请求,反而导致超时而非报错
- PHP 8.2+ 默认启用
openssl.dns_lookup,禁用 TLS 后 DNS 解析行为也可能异常
真正要调的从来不是 Composer,是底层网络环境和证书信任链。临时禁用可以救急,但配错一次 cafile 或漏掉一次系统证书更新,后面三天都在查为什么 composer update 突然又挂了。










