Composer 报 SSL certificate error 的本质是系统或 PHP 的 OpenSSL 无法验证远程 HTTPS 证书链,常见原因包括系统 CA 证书库过旧、PHP 未正确链接 OpenSSL、HTTPS 流量被劫持或 hosts 文件误配;临时禁用 SSL 验证(如 –no-secure-http 或 COMPOSER_NO_SSL=1)仅用于调试,真正解决需更新 CA 证书、确认 PHP 证书路径并配置可信镜像源。
Composer 报 SSL certificate error,本质是系统或 PHP 的 OpenSSL 无法验证远程 HTTPS 证书链,不是 Composer 本身的问题,禁用 SSL 验证只是临时绕过,不解决根本问题。
为什么 composer install 突然报 SSL certificate error?
常见原因包括:系统 CA 证书库过旧(如 CentOS 6/7 默认的 ca-certificates 包太老)、PHP 编译时未正确链接系统 OpenSSL、代理或中间设备劫持 HTTPS 流量(如企业防火墙、杀毒软件)、或本地 hosts 文件误绑定了 packagist.org 域名到错误 IP。
典型错误信息类似:
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
注意:curl -I https://packagist.org 若也失败,说明是底层环境问题,不是 Composer 单独配置能解决的。
临时关闭 SSL 验证的两种方式(仅限调试/内网应急)
以下操作会降低安全性,切勿在生产环境或公共网络中使用。
- 全局禁用(影响所有后续 Composer 命令):
composer config -g secure-http false - 单次命令跳过(推荐,作用域最小):
composer install --no-secure-http或composer update --no-secure-http
⚠️ 注意:secure-http 是 Composer 1.0+ 引入的开关,它控制是否强制要求包仓库使用 HTTPS;但它 不控制证书校验本身。真正禁用证书校验需改 PHP 配置或环境变量 —— 所以以上命令只对部分场景有效,更多时候你需要配合下面这步。
真正绕过 OpenSSL 证书校验(PHP 层级)
Composer 底层依赖 PHP 的 stream_context_create() 和 cURL,证书校验由它们触发。若上述 --no-secure-http 无效,说明错误来自 PHP 的 stream 或 curl 扩展。