Composer SSL报错根源是PHP未正确配置CA证书,需在php.ini中同时设置curl.cainfo和openssl.cafile为同一绝对路径的cacert.pem文件,并重启服务验证;临时禁用SSL仅限排查,不推荐生产使用。

Composer SSL 报错不是 Composer 自己的问题,而是 PHP 底层 OpenSSL 或 cURL 扩展找不到可信的根证书文件。修对 php.ini 里的 curl.cainfo 和 openssl.cafile,90% 的报错当场消失。
怎么确认是证书路径问题?
别猜,先跑两行命令:
-
php --ini看 CLI 模式下实际加载的php.ini路径(注意:Web 和 CLI 的配置文件常不同) -
php -r "print_r(openssl_get_cert_locations());"重点看default_cert_file和ini_cafile是否指向一个真实存在、可读、非空的 PEM 文件 - 再补一刀:
curl -v https://packagist.org/packages.json—— 如果也报SSL certificate problem或unable to get local issuer certificate,说明是系统/PHP 层级问题,和 Composer 无关
php.ini 里该配哪两个配置项?
只配这两个,且必须同时设、路径完全一致:
curl.cainfo = "/path/to/cacert.pem"openssl.cafile = "/path/to/cacert.pem"- 路径必须是绝对路径(
/home/user/cacert.pem✅,~/cacert.pem❌,.cacert.pem❌) - Windows 上用正斜杠
/或双反斜杠\都行,单反斜杠会被解析为转义符 - 文件权限要确保 PHP 进程可读(Linux/macOS 下
chmod 644,别设成 600)
证书文件从哪来?怎么下载和放?
去官方地址拿最新 Mozilla 根证书包:
- 下载地址:
https://curl.se/ca/cacert.pem - Linux/macOS 推荐存到:
/usr/local/etc/php/cacert.pem(Homebrew PHP 可能需/usr/local/etc/openssl@3/cert.pem) - Windows 推荐存到:
C:/php/extras/ssl/cacert.pem(XAMPP/WAMP 用户注意路径是否匹配其phpextrasssl目录) - 别用系统自带的
/etc/ssl/certs/ca-certificates.crt—— 某些发行版它是符号链接,PHP 有时读不了 - 下载后立即验证:
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 扩展层,这个配置根本不起作用
最常被忽略的一点:你改的 php.ini 很可能不是 CLI 实际加载的那个。运行 php --ini 看到的 Loaded Configuration File 路径,才是唯一有效的修改位置。


















