应优先修复证书问题而非禁用ssl验证,如更新ca证书、配置正确cafile路径;应急时可用composer_no_ssl=1或全局设置secure-http=false与cafile=/dev/null。

composer install 时提示 SSL certificate problem 怎么办
直接关 SSL 验证是应急手段,不是修复方案,但确实能快速绕过证书错误继续装包。本质是让 Composer 跳过 HTTPS 的证书校验环节,常见于公司内网代理、自签名证书环境或 OpenSSL 版本太旧的机器上。
最常用且生效的方式是设置 secure-http 为 false,并配合禁用证书验证:
- 运行
composer config -g secure-http false(全局关闭 HTTPS 强制要求) - 再运行
composer config -g cafile /dev/null(Linux/macOS)或composer config -g cafile C:\Windows\Temp\nul(Windows)强制指定无效证书路径 - 或者更干脆:临时加环境变量
export COMPOSER_NO_SSL=true(Linux/macOS)或set COMPOSER_NO_SSL=1(Windows),再执行composer install
注意:cafile 设成空路径比设成 none 或空字符串更可靠;设成 "" 反而可能被忽略。
为什么 set COMPOSER_CAFILE= 有时不生效
COMPOSER_CAFILE 环境变量只在 PHP 的 cURL 扩展启用且未被其他配置覆盖时才起作用。很多情况下它会被 php.ini 里的 curl.cainfo 或 Composer 自己的 cafile 配置项压倒。
- 优先级从高到低:命令行
--cafile参数 >composer.json中的config.cafile>COMPOSER_CAFILE环境变量 >php.ini的curl.cainfo - 用
composer config --list --global查看当前生效的cafile值,别只信环境变量 - 如果 PHP 是通过 MAMP/XAMPP 安装的,
curl.cainfo往往指向一个已过期的cacert.pem,删掉那行或更新证书文件比关 SSL 更稳妥
在 CI/CD 流水线里临时关 SSL 验证的风险点
CI 环境(比如 GitHub Actions、GitLab CI)里用 COMPOSER_NO_SSL=1 最省事,但容易埋雷:
- 它会让所有 HTTPS 请求跳过证书校验,包括 packagist.org 和你私有仓库——中间人攻击风险真实存在
- 某些镜像源(如阿里云、腾讯云 Composer 镜像)强制 HTTPS 且校验证书,关 SSL 后反而连不上,报错可能是
Connection refused或空响应,而不是证书错误 - Docker 构建中若 base image 是
php:alpine,默认没装 CA 证书包,应优先运行apk add --no-cache ca-certificates,而不是关 SSL
真正该做的,是让 CI 环境信任正确的根证书,而不是让整个流程裸奔。
composer create-project 报 curl error 60 怎么快速过
curl error 60 就是证书验证失败的标准错误码,create-project 本质也是走 install 流程,所以应对方式一致,但要注意两点:
- 不能只改当前项目目录下的
composer.json,因为create-project还没生成项目,必须用全局配置或环境变量 - 推荐组合拳:
COMPOSER_NO_SSL=1 composer create-project laravel/laravel myapp - 如果用了
--repository-url指向内部 Nexus/Artifactory,确认该地址是否真支持 HTTPS;有些内网仓库只开 HTTP,这时关 SSL 是唯一办法,但得确保网络链路可信
关 SSL 是把双刃剑:快,但掩盖了证书管理缺失这个更深层问题。下次遇到证书过期、代理劫持或 OpenSSL 升级失败,还是得回到证书链本身去查。










