应优先更换为阿里云等官方新镜像;若需应急,用 composer_disable_tls=1 composer install 临时降级 http,或 curl -k 验证镜像可用性,严禁在生产环境禁用 ssl。

Composer install 时提示 SSL certificate problem 怎么办
直接原因是 Composer 访问的镜像源(比如 https://packagist.phpcomposer.com 或已弃用的 https://packagist.laravel-china.org)证书过期或域名不匹配,cURL 拒绝建立 HTTPS 连接。这不是你本地 PHP 或 OpenSSL 配置坏了,而是镜像站自身 TLS 证书失效导致的硬性拦截。
应急处理不是修证书,而是绕过验证——但必须清楚:这只是临时手段,不能长期开着。
- 仅限开发环境或 CI 构建失败时快速恢复,生产环境禁用
- 执行前确认镜像域名是否真实可信(避免中间人劫持),优先换用官方推荐的新镜像(如阿里云、腾讯云、华为云提供的 Packagist 镜像)
- 命令级忽略只影响当前命令,全局设置会污染所有后续 Composer 操作
用 -n --no-secure 临时跳过 SSL 校验
Composer 本身不提供 --insecure 这类 flag,但可通过 cURL 的底层行为干预。最稳妥的临时方式是加环境变量:
COMPOSER_DISABLE_TLS=1 composer install
这个变量会让 Composer 强制走 HTTP 协议(如果镜像支持 HTTP 回退),比直接关 SSL 更安全一点。若镜像已完全关闭 HTTP,则需配合:
curl -k --proxy "" https://mirrors.aliyun.com/composer/
验证目标镜像是否真能响应(-k 即 --insecure)。注意:--proxy "" 是防止系统代理干扰测试结果。
-
COMPOSER_DISABLE_TLS=1仅对当前命令生效,不影响全局配置 - 某些旧版 Composer(
- 若镜像站强制 HTTPS 且证书错误,此法仍会失败,得用下一种
修改 composer.json 强制指定 HTTP 镜像源
如果镜像站同时提供 HTTP 和 HTTPS 地址(如阿里云:http://mirrors.aliyun.com/composer/),可临时改 composer.json 中的 repositories:
"repositories": [
{
"type": "composer",
"url": "http://mirrors.aliyun.com/composer/"
}
]
注意这里用的是 http://,不是 https://。Composer 会自动降级协议,跳过证书校验环节。但必须确认该镜像站明确支持 HTTP 访问(多数国内镜像已默认关闭 HTTP,仅留 HTTPS)。
- 改完后运行
composer update --lock刷新锁文件,否则旧 lock 可能仍引用 HTTPS 地址 - 不要提交含 HTTP 源的
composer.json到 Git,容易被团队误用 - 部分镜像(如华为云)HTTP 域名与 HTTPS 不同,需查文档确认正确地址
为什么不能全局设 curl.cainfo 或 openssl.cafile
有人试过改 PHP 的 openssl.cafile 或 cURL 的 curl.cainfo 指向一个空证书包,或者用 composer config --global secure-http false —— 这些都不起作用。
因为 Composer 自己封装了 HTTP 客户端逻辑,不直接走 PHP 的 OpenSSL 流程;而 secure-http false 控制的是是否允许 HTTP 源,跟证书校验无关。真正生效的只有三处:
- 环境变量
COMPOSER_DISABLE_TLS - 镜像 URL 显式写成
http:// - 系统级 cURL 配置(不推荐,影响所有命令行工具)
证书错误本质是服务端问题,修复责任在镜像运营方。你做的所有“绕过”,都只是争取时间等他们换证或切新域名——别在本地折腾 CA 包,没用。











