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 扩展。
可尝试以下任一方式(选其一,优先用第二项):
- 设置环境变量(Linux/macOS):
export COMPOSER_NO_SSL=1,再运行composer install - 临时修改 PHP 配置(仅当前命令生效):
php -d openssl.cafile="" -d curl.cainfo="" composer.phar install - 若用 Windows CMD:
set PHP_INI_SCAN_DIR=& php -d openssl.cafile="" -d curl.cainfo="" composer.phar install
这些操作会让 PHP 的 OpenSSL 和 cURL 完全跳过证书验证逻辑,比 Composer 自身配置更底层、更“彻底”。但风险也更高——你将无法察觉中间人攻击或域名被篡改。
真正该做的:修复证书信任链(而非关闭验证)
应急可以关,但长期必须修。最稳妥路径是:
- 更新系统 CA 证书:
Ubuntu/Debian:sudo apt update && sudo apt install --reinstall ca-certificates
CentOS/RHEL:sudo yum update ca-certificates或sudo dnf update ca-certificates - 确认 PHP 使用的 CA 路径:
php -r "print_r(openssl_get_cert_locations());",检查cafile和capath指向的文件是否存在、是否可读 - 若 PHP 是自己编译的,确保 configure 时加了
--with-openssl且指向正确的系统 OpenSSL 路径
国内用户还常遇到 DNS 污染导致连错镜像站,建议显式配置可信镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意:该镜像已停用,请改用 https://packagist.laravel-china.org 或官方支持的 https://mirrors.aliyun.com/composer/)
证书问题看着吓人,其实多数时候就是一条过期的系统证书文件。关验证容易,但漏掉这个细节,下次 CI 构建或新服务器上线还会卡住。










