composer报ssl错误90%因php未正确配置curl.cainfo和openssl.cafile:二者必须同时设置、值完全一致、用绝对路径,且需重启cli或web服务;验证用php --ini和php -r "print_r(openssl_get_cert_locations());"。

Composer 报 SSL 错误,90% 是 PHP 自身没配对 curl.cainfo 和 openssl.cafile,不是网络问题、不是 Packagist 故障、也不是 Composer 版本太旧——改错配置文件、路径写错、重启漏掉,三者占全部失败原因的绝大多数。
怎么确认真是证书路径问题?
别靠猜,两行命令闭环验证:
- 运行
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/cURL 层级问题,和 Composer 无关
php.ini 里必须同时设哪两个配置项?
只设这两个,且值必须完全一致、用绝对路径:
curl.cainfo = "/path/to/cacert.pem"openssl.cafile = "/path/to/cacert.pem"- Windows 上路径用正斜杠
/或双反斜杠\都行,单反斜杠会被 PHP 当转义符解析(C:phpextrassslcacert.pem❌) - Linux/macOS 下确保文件权限为
644,PHP 进程得能读;别设成600或属主不对
证书文件从哪来?怎么放才不踩坑?
去官方源头拿,别用系统自带的符号链接或过期 bundle:
- 下载地址:
https://curl.se/ca/cacert.pem(Mozilla 维护,权威可信) - Linux/macOS 推荐存到:
/usr/local/etc/php/cacert.pem(Homebrew PHP 可能需/usr/local/etc/openssl@3/cert.pem) - Windows(XAMPP/WAMP)推荐存到:
C:/php/extras/ssl/cacert.pem(注意匹配你实际的 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 底层
最容易被忽略的是:同一台机器上 CLI 和 Web SAPI 加载的 php.ini 常是两个文件,改了 Apache 的,忘了 CLI 的,或者反过来。每次验证前,先跑一遍 php --ini 和 php -i | grep 'Loaded Configuration File',眼见为实。











