根本原因是PHP的cURL扩展缺少可信CA根证书或路径配置错误;需通过php.ini设置curl.cainfo指向有效cacert.pem文件,并重启PHP进程验证。

Composer 安装或更新时遇到 SSL 证书错误(如 cURL error 60、SSL certificate problem: unable to get local issuer certificate),根本原因不是 Composer 本身有问题,而是 PHP 的 cURL 扩展无法验证 HTTPS 连接的证书链——通常因为系统或 PHP 缺少可信 CA 根证书,或证书路径配置错误。
为什么 composer install 突然报 SSL 错误?
常见触发场景:Windows 上用 XAMPP/MAMP/WampServer 新装 PHP、macOS 升级后 OpenSSL 更新、Linux 发行版未预装 CA 包、或 PHP 编译时未指定 --with-curl 或 CA 路径。不是网络被墙,也不是 Packagist 服务问题。
- 典型错误信息:
cURL error 60: SSL certificate problem: unable to get local issuer certificate - 执行
php -r "print_r(openssl_get_cert_locations());"可查看 PHP 当前信任的 CA 路径,如果cafile为空或指向不存在的文件,就必然失败 - Windows 下尤其容易因 PHP 自带的
curl-ca-bundle.crt过期或缺失导致
临时绕过(仅开发环境)
不推荐长期使用,但能快速验证是否为证书问题本身:
- 运行
composer config -g secure-http false→ 强制所有仓库走 HTTP(危险,勿用于生产) - 或在命令前加环境变量:
COMPOSER_DISABLE_TLS=1 composer install - 更细粒度控制:只对 Packagist 关闭 TLS:
composer config -g repos.packagist.org {"url": "http://packagist.org", "type": "composer"}
正确修复 CA 证书路径(推荐)
核心是让 PHP 的 cURL 知道去哪里找根证书。优先级从高到低:
- 修改
php.ini,添加或修正:curl.cainfo = "/path/to/cacert.pem"(Windows 常用路径如C: mppphpextrassslcacert.pem;macOS 可用/usr/local/etc/openssl@3/cert.pem;Linux 一般为/etc/ssl/certs/ca-certificates.crt) - 若无现成证书文件,可手动下载最新 Mozilla CA 包:
curl -sS https://curl.se/ca/cacert.pem -o /tmp/cacert.pem,再配置到php.ini - Windows 用户注意:路径必须用正斜杠
/或双反斜杠\,单反斜杠会被 PHP 解析为转义符 - 改完
php.ini后必须重启 Web 服务器或 CLI PHP 进程(php --ini确认加载的是你改的配置)
验证是否修好
不要直接跑 composer update 测试,先用最小闭环确认:
- 执行
php -r "print_r(openssl_get_cert_locations());",检查输出中cafile是否指向有效文件且可读 - 运行
php -r "var_dump(file_get_contents('https://packagist.org/packages.json'));"—— 若不报错并输出 JSON,说明 PHP 层 SSL 已通 - 最后再试
composer clear-cache && composer install
CA 证书路径配置错误比网络代理问题更隐蔽,很多人反复重装 Composer 或换镜像源都无效,其实是 PHP 根本没拿到证书。改完 php.ini 后务必确认生效,而不是假设“应该好了”。


















