composer默认强制https,secure-http是全局开关而非项目级配置;项目中设"secure-http": false会使其失效,应运行composer config --global secure-http true修复,并检查repositories是否全为https://。

Composer 默认已强制 HTTPS,所谓“配置”其实是排查和修复被意外关闭或绕过的环节。
secure-http 是全局开关,不是项目级配置项
它控制所有仓库(包括 packagist.org)是否允许 HTTP 协议,但只在全局配置中生效。项目级 composer.json 里的 "secure-http": false 不会覆盖它——而是直接让整个配置块失效,导致 Composer 忽略该字段,退回到默认行为(即 true),但你可能误以为它“起作用”了。
- 查真实值:运行
composer config -g secure-http,输出应为true;若为false,说明被手动关过 - 修复命令:用
composer config --global secure-http true写入,不是composer config secure-http true - 验证是否写入成功:执行
composer config --global --list | grep secure-http,确认输出带(global)标记且值为true - 注意 JSON 格式:
~/.composer/config.json中多一个逗号、少一个引号,整段配置都会静默失效
HTTP 仓库地址会在解析阶段直接报错,不读配置
只要 composer.json 的 repositories 数组里有一条 "url": "http://...",Composer 就会在加载文件后立刻退出,报错类似 The 'http://' URL 'http://my-repo.local' is not allowed——此时 secure-http 值根本没机会被读取。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查点:运行
composer config --list | grep -A10 repositories,看所有 URL 是否都以https://开头 - 常见陷阱:CI 脚本自动注入
http://localhost:8000测试源;旧版模板残留http://packagist.phpcomposer.com(该镜像已停用多年) - 私有仓库若暂不支持 HTTPS,不能靠关
secure-http解决,必须加"allow_ssl_downgrade": true到对应仓库对象内(仅限 Composer 2.2+) - 国内镜像务必用 HTTPS 地址:
https://mirrors.aliyun.com/composer/,http://版本早已不可用
packagist.org 官方源不能靠 repo.packagist.org 配置修改
这个配置项在 Composer 2.0+ 中完全无效。官方源是硬编码处理的,任何对 repo.packagist.org 的设置都不会影响实际请求地址。
- 错误操作:
composer config --global repo.packagist.org https://packagist.org—— 执行无报错,但毫无作用 - 真正有效的做法:确保
secure-http为true,然后让 Composer 自己走默认逻辑,它就会发请求到https://packagist.org/packages.json - 验证方式:加
-vvv运行composer update,过滤日志:2>&1 | grep "Downloading",输出中只应出现https://地址 - 若看到
http://packagist.org,说明你用了旧版 Composer(如 1.x),必须升级:composer self-update
签名验证和镜像源不是一回事,别混淆安全层级
启用 secure-http 只管传输加密,不管包内容是否被篡改。要防供应链投毒,还得开签名验证,并谨慎使用镜像。
- 签名验证命令:
composer config --global security.signature true - 镜像只能用于加速元数据(
packages.json),不能替代官方源做完整性校验;阿里云等镜像不返回signature字段,所以不能设为repos.packagist的主源 - 正确镜像用法:
composer config --global repos.packagist.type composer+composer config --global repos.packagist.url https://mirrors.aliyun.com/composer/ - 最终验证:
composer diagnose输出中必须同时出现secure-http: OK和signature verification: OK
最容易被忽略的是:即使所有配置都对,如果系统 CA 证书缺失(比如 Docker 容器没装 ca-certificates),HTTPS 握手失败,Composer 会卡住或报 cURL error 35——这时不该关 secure-http,而该补证书或调 ssl.certificate_authority。










