95%的composer ssl错误源于php未正确加载ca证书,需在cli实际生效的php.ini中同时配置绝对路径的curl.cainfo和openssl.cafile指向最新cacert.pem,并重启终端或服务验证。

Composer下载报SSL证书错误,95%不是网络或镜像问题,而是PHP根本没加载可信CA证书——修对php.ini里的curl.cainfo和openssl.cafile就能恢复稳定连接。
怎么确认是PHP证书路径失效,而不是网络或代理问题
别猜,直接用两行命令定位根源:
-
php --ini查出 CLI 模式下真正生效的php.ini路径(Web 和 CLI 配置常不同) -
php -r "print_r(openssl_get_cert_locations());"看default_cert_file和ini_cafile是否为空、指向不存在的文件,或文件大小为 0(ls -l /path/to/file可验证) - 再补一刀:
curl -v https://packagist.org/packages.json—— 如果也报SSL certificate problem或unable to get local issuer certificate,说明是 PHP/cURL 层级信任链断裂,和 Composer 无关
php.ini 必须同时配对设置的两个关键项
只设一个或路径不一致,照样失败。必须在你 CLI 实际加载的 php.ini 文件末尾添加:
curl.cainfo = "/path/to/cacert.pem"openssl.cafile = "/path/to/cacert.pem"- 路径必须是绝对路径:
/usr/local/etc/php/cacert.pem✅,~/cacert.pem❌,.cacert.pem❌ - Windows 上推荐用正斜杠:
C:/php/extras/ssl/cacert.pem(单反斜杠会被解析为转义符) - 文件权限要确保可读:
chmod 644 cacert.pem,别设成600
证书文件从哪来?怎么放才可靠
别用系统自带的符号链接(如 /etc/ssl/certs/ca-certificates.crt),PHP 有时读不了。直接用 Mozilla 官方维护的最新根证书:
- 下载地址:https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251
- Linux/macOS 推荐存到:
/usr/local/etc/php/cacert.pem(Homebrew PHP)或/etc/ssl/certs/cacert.pem - Windows 推荐存到:
C:/php/extras/ssl/cacert.pem(XAMPP/WAMP 用户注意匹配其php/extras/ssl/目录) - 下载后立即验证:
php -r "var_dump(file_get_contents(ini_get('curl.cainfo')) !== false);"应输出bool(true)
改完 php.ini 为什么还是不生效
常见失效全是重启没到位:
- CLI 模式:关掉当前终端,新开一个;别只改了配置就直接跑
composer install - Web 模式(Apache/Nginx):必须重启 Web 服务或
php-fpm,刷新页面没用 - 验证是否真生效:
php -i | grep -E 'curl.cainfo|openssl.cafile'输出的路径必须是你刚写的 - 特别注意:
composer config --global cafile只影响 Composer 自封装的 HTTP 客户端(php-http),而绝大多数 SSL 错误发生在底层 cURL 或 OpenSSL 调用中,它不起作用
最易被忽略的一点:CLI 和 Web 环境可能调用完全不同的 PHP 实例和 php.ini,which php 和 php -i | grep 'Loaded Configuration File' 必须分别确认。同一台机器上 composer install 失败但 php composer.phar install 成功,基本就是这个原因。











