Composer SSL证书错误本质是PHP未配置可信CA证书路径,需在php.ini中设置curl.cainfo为绝对路径的cacert.pem文件并重启环境,而非禁用SSL验证。

Composer 无法安装包,报 SSL certificate problem: unable to get local issuer certificate 或类似错误,本质是 PHP 的 cURL 找不到可信 CA 证书路径,并非 Composer 本身要“跳过验证”——强行跳过只会埋下安全与兼容隐患。
为什么 composer install 突然报 SSL 错误?
常见于 Windows XAMPP/MAMP、macOS Homebrew PHP、或自编译 PHP 环境。PHP 缺少 curl.cainfo 配置,导致 cURL 不知道该用哪个 CA 证书文件校验 HTTPS 连接。Composer 所有包下载都走 HTTPS,一旦证书链校验失败就中断。
不是网络代理问题,也不是 GitHub 封锁——你用浏览器能打开 https://packagist.org,但 PHP CLI 下的 cURL 就不行,这就是典型 CA 路径缺失。
正确设置 curl.cainfo(推荐)
找到你的 php.ini 文件(运行 php --ini 查看加载路径),在其中添加或修改:
curl.cainfo = "C:/xampp/php/extras/ssl/cacert.pem"
Windows XAMPP 用户可直接用自带的 cacert.pem;macOS Homebrew PHP 用户通常需手动下载:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 访问
https://curl.se/ca/cacert.pem,保存为本地文件(如/usr/local/etc/php/cacert.pem) - 在
php.ini中写入完整绝对路径:curl.cainfo = "/usr/local/etc/php/cacert.pem" - 重启 CLI 环境(关闭终端重开),执行
php -r "print_r(openssl_get_cert_locations());"确认cafile值已更新
临时绕过(仅限开发机,慎用)
仅当 CA 配置暂时无法生效、又急需调试时使用,切勿在 CI/生产环境或团队共享配置中启用:
- 全局禁用(影响所有 Composer 命令):
composer config -g secure-http false - 单次命令跳过(不改配置):
composer install --no-secure-http - 更底层的 cURL 级跳过(不推荐):
export COMPOSER_CAFILE=""(Linux/macOS)或set COMPOSER_CAFILE=(Windows CMD)
注意:secure-http=false 并非跳过 SSL,而是允许降级到 HTTP 源(Packagist 已强制 HTTPS,实际会直接失败),它真正起效的场景极少,容易让人误以为“修好了”,实则掩盖了根本问题。
验证是否真修复了
别只看 composer install 是否跑完——执行以下两步确认:
- 运行
composer diagnose,检查输出中 “The openssl extension is loaded” 和 “The curl extension is loaded” 后是否还有 “CA bundle not found” 提示 - 手动测试 PHP 的 HTTPS 请求:
php -r "echo file_get_contents('https://packagist.org/packages.json?_t=' . time());",不报错才算真正打通
很多用户配完 curl.cainfo 忘记重启终端,或者路径用了相对路径(如 ./cacert.pem),PHP CLI 根本读不到——务必用绝对路径,且确保文件存在、可读。

















