composer如何配置secure-http为false_composer允许HTTP私有源【内网】

2次阅读

composer 默认 secure-http 为 true 是为防中间人攻击;内网 http 私有源需全局执行 composer config -g secure-http false,且须确保域名解析正常、响应合法,https 才是生产环境正解。

composer如何配置secure-http为false_composer允许HTTP私有源【内网】

为什么 secure-http 默认是 true 且拒绝 HTTP 源

Composer 从 1.0 开始强制要求所有仓库(包括私有源)必须使用 HTTPS,这是为了防止中间人劫持、包篡改或凭证泄露。当你在内网用 HTTP 搭建了私有 Packagist 或 Satis 服务,composer install 会直接报错:The repository 'xxx' is not secure, and the 'secure-http' setting is enabled.

如何全局关闭 secure-http(仅限可信内网)

这不是“配置 Composer”,而是修改 Composer 的全局配置项。它影响所有项目,所以只应在完全可控的内网环境使用。

  • 执行 composer config -g secure-http false,该命令写入 ~/.composer/config.json
  • 验证是否生效:运行 composer config -g secure-http,输出应为 false
  • 注意:如果之前设过项目级配置(composer config secure-http false),它会覆盖全局设置,需先删掉项目根目录下的 composer.json 中的 "secure-http" 字段或运行 composer config --unset secure-http

为什么不用 --no-secure-http 参数临时绕过

这个参数根本不存在 —— Composer 命令行不支持临时禁用 secure-http。你查不到它的文档,也跑不通。网上有些文章写的 --no-secure-http 是混淆了旧版调试参数或臆测,别试。

  • 唯一合法的运行时控制方式,是提前配好 secure-http 配置项
  • CI/CD 脚本里若要适配 HTTP 私有源,必须在执行 composer install 前完成 composer config -g secure-http false
  • 某些 docker 镜像(如 composer:2)默认不带全局配置,每次新建容器都要重设

HTTP 私有源上线后还要注意什么

关掉 secure-http 只是让 Composer “不拦你”,不代表安全风险消失。内网 HTTP 源仍可能被同网段其他机器嗅探、伪造响应或缓存污染。

  • 确保私有源域名能被正确解析(比如 packagist.internal),不要用 http://192.168.x.x —— Composer 对 IP 地址的 HTTP 源支持不稳定,某些版本会静默跳过
  • 私有源的 packages.json 必须返回有效 JSON,且 content-typeapplication/json,否则即使关了 secure-http 也会报 Invalid response
  • 如果私有源用了自签名证书但你又想切回 HTTPS,别只改 URL,还得配 composer config -g cafile /path/to/cert.pem,否则照样失败

secure-http 是权宜之计,不是长期方案。真要上生产,HTTPS + 内网 CA 信任才是正路。内网没 HTTPS?那得先解决那个问题,而不是只调 Composer 的开关。

text=ZqhQzanResources