secure-http 是 composer 默认启用的安全配置,强制仓库 url 必须使用 https 以防止中间人攻击;默认值为 true,若检测到 http 源则报错;可通过 composer config -g secure-http false(全局)或 composer config secure-http false(当前项目)临时关闭,但推荐优先将仓库升级为 https 并确保证书、dns 和系统 ca 有效。

secure-http 是什么,为什么它默认开启
Composer 的 secure-http 配置项控制是否允许通过 HTTP 协议访问包仓库(如 Packagist)。它默认为 true,意味着所有仓库 URL 必须是 HTTPS;一旦发现 http:// 开头的源,就会报错:The repository 'xxx' uses HTTP, which is not allowed by default。
这是安全机制,防止中间人篡改下载内容。但有些私有仓库或老旧内部镜像仍只提供 HTTP,这时就得调整配置。
怎么关闭 secure-http(临时绕过)
不推荐长期关闭,但调试或内网环境可用。两种方式:
- 全局关闭(影响所有项目):
composer config -g secure-http false
- 仅当前项目关闭:
composer config secure-http false
(会写入项目根目录的composer.json中config字段)
注意:如果项目 composer.json 里已声明了 repositories 并含 HTTP 地址,关掉 secure-http 后仍需确保该仓库服务可达、证书/域名无误——否则会卡在连接失败,而非安全警告。
更稳妥的做法:用 HTTPS 替换 HTTP 源
比起关掉校验,直接升级仓库协议更可靠。常见场景:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- Packagist 官方源不用动,它本就是 HTTPS
- 私有 Satis 或 Private Packagist 实例,应配置反向代理(如 Nginx)暴露 HTTPS 端点,再把
repositories里的http://repo.example.com换成https://repo.example.com - 国内镜像如腾讯云、阿里云 Composer 镜像,都支持 HTTPS,只需把
http://mirrors.cloud.tencent.com/composer改为https://mirrors.cloud.tencent.com/composer
改完记得运行 composer clear-cache,否则旧缓存可能干扰新协议尝试。
CI/CD 环境下要注意证书和 DNS
即使开了 HTTPS,CI 流水线仍可能失败,典型表现是:file_get_contents(): SSL operation failed 或 cURL error 60: SSL certificate problem。
原因通常是:
- 自签名证书未被 CI 环境信任(比如用自建 Harbor + Satis)
- DNS 解析异常导致 HTTPS 域名无法命中正确 IP
- 容器基础镜像太老,内置 CA 证书过期(如某些 Alpine 3.12 镜像)
解决方向不是关 secure-http,而是更新系统证书(apk add ca-certificates)、用 --no-verify 仅跳过证书校验(不推荐),或在 composer.json 的 repositories 中显式加 "options": {"ssl": {"verify_peer": false}}(仅限绝对可信内网)。
真正麻烦的从来不是配不配得上 HTTPS,而是证书链对不对、时间准不准、DNS 转发有没有漏掉 —— 这些地方一卡,secure-http 就成了最先报错的表象。










