Composer 2.x 默认启用 secure-http,但旧环境或自定义配置可能覆盖;禁用后会静默接受 HTTP 源,导致元数据被篡改或恶意包注入。需运行 composer config -g secure-http true 启用,并确保镜像 URL 以 https:// 开头且结尾带 /。

必须显式启用 secure-http,否则 Composer 会静默允许 HTTP 源,存在中间人劫持风险
为什么 secure-http 默认不强制?
Composer 2.x 起默认开启 secure-http,但部分旧环境或自定义配置可能覆盖它;一旦禁用,http:// 协议的仓库(如私有源、测试镜像)会被接受,而这类连接不校验证书、不加密元数据,攻击者可篡改包列表或注入恶意 ZIP。
- 检查当前状态:
composer config -g secure-http—— 输出true表示已启用 - 若输出为空或
false,立即执行:composer config -g secure-http true - 该设置写入全局
config.json的"secure-http": true字段,不影响已有项目级配置
secure-http 和 HTTPS 镜像源的关系
启用 secure-http 不等于“自动走 HTTPS”,而是拒绝任何 http:// 开头的仓库 URL。国内镜像如 https://mirrors.aliyun.com/composer/ 符合要求;但若误配成 http://mirrors.aliyun.com/composer/(少一个 s),即使启用了 secure-http,也会在 composer install 时直接报错:Invalid repository type: http is not allowed。
- 镜像源 URL 必须以
https://开头,且末尾带/ - 不要混用:
repo.packagist是元数据代理键名,repos.packagist(多一个s)在新版中被静默忽略 - 验证镜像是否生效:
composer config -g repo.packagist应输出完整 JSON,其中url字段含https://
HTTPS 连接失败时,别急着关 secure-http
常见错误如 cURL error 60: SSL certificate problem 或 SSL connect error,往往不是协议问题,而是证书链缺失或 PHP OpenSSL 配置异常。
- 先确认系统 CA 是否可信:
curl -I https://packagist.org能通,说明系统层没问题 - 若仅 Composer 报错,检查是否配了自定义
ssl.cafile:路径是否存在?是否 PEM 格式?是否包含完整中间 CA + 根 CA? - 临时绕过验证(仅调试):
composer config -g secure-http false—— 但上线前必须还原,并解决根本证书问题 -
secure-http false是高危操作,不能用于 CI/CD 或生产构建环境
真正难处理的是证书链顺序错、文件权限不足、或 Composer ≥2.5 版本对 ssl.cafile 加载失败时静默 fallback 到系统 CA —— 这时候你改了配置却没效果,得靠 composer diagnose 看 “secure-http: OK” 和 “CA file: /path/to/ca.pem” 两行同时出现才算到位。


















