Composer报cURL error 60是因PHP cURL缺少有效CA证书,需下载cacert.pem并配置php.ini中curl.cainfo指向该文件,再设Composer全局cafile并验证diagnose输出OK。

Composer install/update 报错 cURL error 60:SSL certificate problem
这是 Composer 在 Windows 或某些 Linux 发行版上最常见的 SSL 错误,典型报错是:cURL error 60: SSL certificate problem: unable to get local issuer certificate。根本原因不是 Composer 本身有问题,而是 PHP 的 cURL 扩展找不到或用错了 CA 证书包——尤其是 Windows 下的 PHP 自带 cURL 往往不带有效证书,或系统证书已过期。
检查并替换 PHP 使用的 cacert.pem 文件
Composer 依赖 PHP 的 cURL,而 cURL 需要可信 CA 证书来验证 HTTPS 连接。PHP 默认不指定证书路径,容易 fallback 到空或过期路径。
- 下载最新
cacert.pem:从 https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251 直接保存为纯文本文件(注意不要用浏览器另存为 HTML) - 在
php.ini中显式指定路径,添加或修改这一行:curl.cainfo = "D:\php\extras\ssl\cacert.pem"(路径用双引号,反斜杠需转义或改用正斜杠) - 重启 Web 服务或 CLI 环境,运行
php -r "print_r(curl_version());"确认ssl_version和features中包含CURL_VERSION_SSL
临时绕过 SSL 验证(仅限调试,切勿用于生产)
不推荐长期使用,但可快速验证是否确为证书问题。绕过会失去 HTTPS 安全保障,且 Composer 8.2+ 已默认禁用该选项。
- 命令行临时禁用:
composer install --no-plugins --no-scripts -n --prefer-dist --ignore-platform-reqs不解决 SSL,真正生效的是:export COMPOSER_DISABLE_TLS=1(Linux/macOS)或set COMPOSER_DISABLE_TLS=1(Windows CMD) - 更隐蔽的失败点:某些代理或杀毒软件会劫持 HTTPS 流量并注入自签名证书,此时即使换了
cacert.pem也无效——需在杀软设置中关闭“HTTPS 扫描”或把 packagist.org 加入白名单
国内用户优先考虑镜像 + cafile 双保险
单纯换证书可能仍因网络波动失败,尤其在 DNS 污染或 TLS 握手被干扰时。建议组合使用官方镜像和本地证书。
- 设置阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 确认
composer config -g cafile输出为空,再执行:composer config -g cafile "D:/php/extras/ssl/cacert.pem"(路径必须绝对、可读) - 验证是否生效:运行
composer diagnose,关注输出中CA file行是否显示你指定的路径,且状态为OK
证书过期本身不难换,难的是多个配置层(PHP、Composer、系统代理、杀软)叠加干扰,排查时务必逐层确认 cafile 是否真正被加载,而不是只改了 php.ini 却忘了重启 CLI 进程。










