composer怎么禁用TLS验证_composer insecure配置说明【测试】

2次阅读

应将私有ca证书添加到信任链,配置curl.cainfo指向该证书文件,而非禁用tls或设secure-http=false,以安全解决ssl证书问题。

composer怎么禁用TLS验证_composer insecure配置说明【测试】

composer install 时提示 SSL certificate problem 怎么办

这是典型的 TLS 验证失败,不是 composer 本身报错,而是它底层用的 cURL 或 OpenSSL 拒绝了不安全的证书链。生产环境绝不能关,但本地测试或内网私有源确实可能遇到自签名证书、过期证书或中间 CA 缺失。

  • 临时绕过:在命令行加 -n(即 --no-plugins)没用,真正起作用的是 COMPOSER_DISABLE_TLS=1 环境变量
  • 更稳妥的临时方案是改配置:composer config -g secure-http false,这会把全局 config.json 里的 secure-http 设为 false
  • 注意:这个设置只影响 HTTP/https 协议判断,不等于禁用 TLS;它只是允许 Composer 访问 http:// 源——而你真正需要的是信任某个 HTTPS 源,所以它治标不治本

为什么 secure-http=false 不能解决自签名 HTTPS 报错

因为 secure-http 控制的是「是否允许非 HTTPS 的仓库地址」,和 TLS 握手验证完全无关。你访问的是 https://my-internal-repo.local,但证书无效,错误来自 PHP 的 stream context 或 cURL,Composer 自己不处理证书校验逻辑。

  • 真实报错通常是:cURL Error 60: SSL certificate problem: self signed certificate 或类似 Peer's Certificate issuer is not recognized
  • PHP 层面要生效,得让 openssl.cafilecurl.cainfo 指向一个包含你私有 CA 的 PEM 文件
  • Composer 不读取 php.ini 里所有配置,但它依赖 PHP 的 stream wrappers,所以改 curl.cainfo 是最直接的方式

如何让 Composer 信任自签名证书(推荐做法)

不是关验证,而是把你的根证书加进信任链。比设 secure-http=false 安全得多,也符合 Composer 本身的设计逻辑。

  • 把你的 CA 证书(比如 my-ca.crt)转成 PEM 格式(如果还不是),合并到系统默认 CA 包或单独存一个路径,例如 /usr/local/share/ca-certificates/my-ca.crt
  • 运行 update-ca-certificateslinux)或手动配置 PHP:curl.cainfo = "/path/to/my-ca.crt"(写进 php.ini
  • 验证是否生效:执行 php -r "print_r(stream_context_get_options(stream_context_create(['http' => []])));",看 cafile 是否已加载
  • windows 用户注意:PHP for Windows 默认不读系统证书库,必须显式配 curl.cainfo

COMPOSER_DISABLE_TLS=1 的实际效果和风险

这个环境变量会让 Composer 完全跳过 HTTPS 协议层的加密检查,等价于强制用 HTTP 请求所有 https:// 地址——也就是把 TLS 连接降级成明文 HTTP。

  • 它不会修改证书验证逻辑,而是让 Composer 构造请求时直接把 URL 的 https:// 替换成 http://
  • 如果你的私有仓库只监听 HTTPS(比如 nginx 强制 301 跳转),那这个设置会导致 404 或重定向失败
  • 它对 composer validatecomposer show 等命令都生效,且无法按仓库粒度控制
  • CI/CD 中误用此变量,等于把整个依赖拉取过程暴露在中间人攻击下

真要压测或离线调试,不如用 composer install --no-plugins --no-scripts 配合本地 path 仓库,比硬关 TLS 更可控。

text=ZqhQzanResources