secure-http=true是强制项,因composer 2.0+默认启用且关闭后将允许http降级、跳过tls校验与签名验证,导致packages.json被中间人篡改;必须配合可信https镜像、有效ca证书及签名支持镜像才能形成安全闭环。

secure-http 必须设为 true,否则 Composer 会接受 HTTP 源,跳过 TLS 校验,导致元数据被中间人篡改。
为什么 secure-http=true 不是可选项而是强制项
Composer 2.0+ 默认启用 secure-http,但若项目或全局配置中显式设为 false(比如为绕过旧镜像的 HTTPS 问题),就会关闭整个安全链路——所有仓库 URL 都允许降级为 HTTP,packages.json 可被劫持,签名验证形同虚设。
- 现象:执行
composer install -vvv日志里出现http://请求,或报Invalid signature却不中断流程 - 根本原因:一旦
secure-http关闭,Composer 就不会校验响应头中的X-Content-Signature,也不会拒绝无签名的包索引 - 影响范围:不仅限于自定义仓库,连
repo.packagist镜像也会失去元数据完整性保护
secure-http 的生效层级与配置方式
该配置在全局和项目级都有效,但优先级不同;错误的写法会导致它被忽略或覆盖。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 全局设置(推荐):
composer config --global secure-http true→ 写入~/.composer/config.json,所有项目继承 - 项目级设置:
composer config secure-http true→ 写入当前项目composer.json的config字段,仅对该目录生效 - 禁用它只会让问题更隐蔽:
composer config --global secure-http false是高危操作,等同于主动放弃 HTTPS 通道保护 - 注意:如果
composer.json中已有"config": { "secure-http": false },运行项目级命令不会覆盖它,必须先composer config --unset config.secure-http
配了 secure-http=true 还报错?检查这三件事
常见“明明开了 HTTPS 却仍失败”的情况,往往不是配置本身错了,而是底层依赖没对齐。
-
curl.cainfo和openssl.cafile在php.ini中未指向有效的 PEM 文件 → 导致 PHP 层 TLS 握手失败,Composer 报cURL error 60,跟镜像无关 - 镜像 URL 缺少结尾
/(如https://mirrors.aliyun.com/composer)→ Composer 拼出错误路径/composerpackages.json,404 后 fallback 到官方源,触发防火墙 TLS 审查 - 用了已停更镜像(如
https://packagist.laravel-china.org)→ 不同步signature字段,Composer 自动退回到无签名验证模式,即使secure-http=true也拦不住
真正起作用的安全协议控制,不在 URL 表面,而在 secure-http、证书路径、镜像签名能力三者闭环。漏掉任意一环,HTTPS 就只是个好看协议名。










