根本不用动 composer 配置,90% 的 ssl 证书报错是 php 没读到有效的 ca 证书文件,修 php.ini 才真正起效:必须同时设置 openssl.cafile 和 curl.cainfo 为同一绝对路径的最新 cacert.pem 文件,并重启服务。

根本不用动 Composer 配置,90% 的 SSL 证书报错是 PHP 没读到有效的 CA 证书文件,修 php.ini 才真正起效。
怎么确认真是证书问题,不是网络或代理导致的
别猜,先跑两行命令看底层是否一致失败:
- 运行
php -r "print_r(openssl_get_cert_locations());",重点检查default_cert_file路径是否存在、文件大小是否 >100KB(过小大概率是空文件或旧包) - 再跑
curl -v https://packagist.org/packages.json—— 如果也报SSL certificate problem或unable to get local issuer certificate,说明是系统/PHP 层级问题,和 Composer 无关 - 如果
composer diagnose提示ssl.capath is not configured或cafile is not set,也是同一类信号
改哪两个配置项才真正生效
composer config --global cafile 是无效的——它只影响 Composer 自己封装的 HTTP 客户端(php-http),而绝大多数 SSL 失败发生在 cURL 或 OpenSSL 扩展层。真正起效的是 php.ini 里的这两行,且必须同时设置、路径完全一致:
openssl.cafile="/path/to/cacert.pem"curl.cainfo="/path/to/cacert.pem"
注意:/path/to/cacert.pem 必须是绝对路径;Windows 上可用双反斜杠 C:\php\extras\ssl\cacert.pem 或正斜杠 C:/php/extras/ssl/cacert.pem;不能用 ~ 或相对路径;路径中不能有中文或空格。
证书文件从哪来、怎么配才不踩坑
去官方地址下载最新权威证书包:https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251(Mozilla 维护,每日更新)。保存后按系统选路径:
- Linux/macOS:推荐
/usr/local/etc/php/cacert.pem(Homebrew PHP)或/etc/ssl/certs/ca-certificates.crt(但注意某些发行版该路径是符号链接,PHP 有时读不了,优先用前者) - Windows:推荐
C:/php/extras/ssl/cacert.pem(XAMPP/WAMP 用户尤其注意,原自带的curl-ca-bundle.crt常年不更新,直接替换更省事)
编辑你 CLI 模式下实际加载的 php.ini(运行 php --ini 看 Loaded Configuration File 路径),在末尾添加上面两行。改完必须重启:CLI 环境要重开终端,Web 环境要重启 Apache/Nginx 或 php-fpm —— 光刷新页面没用。
为什么临时关 TLS 往往治标不治本
像 COMPOSER_DISABLE_TLS=1 或 composer config -g secure-http false 这类操作,只是绕过校验,并不修复证书链本身。后果很实在:
- Packagist 自 2022 年起已强制 HTTPS,
secure-http=false可能直接报错退出 - 下次换环境、CI 构建机升级 PHP、甚至重装系统,问题照旧出现
- 若项目依赖 Git 克隆私有仓库,
git config --global http.sslVerify false会额外引入 Git 层的证书跳过,掩盖真实问题
最常被忽略的一点:CLI 和 Web 环境可能加载不同的 php.ini,用 php --ini 和 phpinfo() 分别验证,否则改了白改。











