secure-http false 仅允许注册 HTTP 仓库,不跳过 TLS 校验;真正绕过需用 COMPOSER_NO_SSL=1 或 COMPOSER_DISABLE_TLS=1 环境变量,且仅限调试环境。

绕过 HTTPS 证书验证是高风险操作,仅限调试或完全可控的离线/测试环境;生产环境必须修复证书链,而非禁用校验。
为什么 secure-http false 不起作用
设置 composer config --global secure-http false 只告诉 Composer 允许注册 HTTP 协议的仓库,但不跳过 TLS 握手本身。所有默认源(如 packagist.org)和镜像站仍是 HTTPS,请求仍会触发 OpenSSL/cURL 的证书验证,报错仍是 SSL certificate problem: unable to get local issuer certificate 或 cURL error 60。
- 该配置对已硬编码为 HTTPS 的源(包括阿里云、腾讯云镜像)完全无效
- 它不能影响 PHP 底层 stream 或 cURL 扩展的证书校验逻辑
- 若你看到这个错误,说明问题在 PHP 环境,不是 Composer 配置层
真正生效的绕过方式只有两个
注意:以下任一方式都意味着你主动放弃 HTTPS 完整性保护,仅用于临时排障。
- 环境变量
COMPOSER_NO_SSL=1(Linux/macOS)或$env:COMPOSER_NO_SSL="1"(PowerShell),它会强制 Composer 使用不校验证书的 cURL 选项 - 设
COMPOSER_DISABLE_TLS=1,效果类似,但更底层——它会让 Composer 完全跳过 TLS 层初始化 - Windows CMD 中不能用
set COMPOSER_DISABLE_TLS=1后直接跟 composer 命令,需分两行执行,否则变量不生效
离线场景下“绕过证书”是伪需求
如果你已设 COMPOSER_DISABLE_NETWORK=1,却还看到 SSL 错误,说明 Composer 仍在尝试联网——那根本不是证书问题,而是配置未真正生效。
- 检查是否残留了全局镜像:
composer config --global repo.packagist输出非false就要清掉:composer config --global --unset repo.packagist - 确认没启用插件:
--no-plugins必须显式带上,某些插件会在 install 阶段偷偷发起 HTTPS 请求 - 项目
composer.json里若有"repositories"字段,它会覆盖所有全局设置,此时绕过证书的环境变量也救不了你
最常被忽略的一点:你以为在绕证书,其实 Composer 正在 fallback 到 packagist.org 并卡在那里——而你根本没意识到镜像配置压根没生效。


















