应修复证书链或换用可信CA,而非忽略SSL验证;临时绕过仅限离线调试且须用COMPOSER_DISABLE_TLS=1,-k参数已废弃。

直接结论:不要忽略 SSL 验证,真正该做的是修复证书链或换用可信 CA;临时绕过 composer 的证书检查只适用于离线调试,且必须用 COMPOSER_DISABLE_TLS 而非 -k(后者已废弃)。
为什么 composer install 突然报证书错误?
常见现象是 file_get_contents(): SSL operation failed with code 1 或 cURL error 60: SSL certificate problem。不是 Composer 本身坏了,而是 PHP 的 OpenSSL 扩展找不到系统信任的根证书(CA bundle),尤其在 Windows、Docker 容器、或自建镜像里高频出现。
根本原因有三个:
- PHP 编译时没指定
--with-curl或未绑定系统 CA 路径 - Windows 上 PHP 自带的
curl.cainfo指向了一个不存在或过期的cacert.pem - 公司内网强制代理重签 HTTPS 流量,导致证书链不被 PHP 默认信任
怎么查当前 PHP 用的证书路径?
运行 php -r "print_r(openssl_get_cert_locations());",重点关注 default_cert_file 和 cafile 字段。如果值为空、路径不存在、或文件是空的,就是问题源头。
修复方式分场景:
- Linux/macOS:确保系统有
ca-certificates包(Debian/Ubuntu)或ca-root-nss(Alpine),再让 PHP 读它:echo "curl.cainfo=/etc/ssl/certs/ca-certificates.crt" >> /usr/local/etc/php/conf.d/docker-php-ext-curl.ini - Windows:下载最新
cacert.pem(从 curl.se),然后在php.ini中写明:curl.cainfo="C:\path\to\cacert.pem" - Docker:在
Dockerfile中加一句RUN apk add --no-cache ca-certificates && update-ca-certificates(Alpine)或RUN apt-get update && apt-get install -y ca-certificates(Debian)
真要临时跳过验证,该用哪个参数?
-k 在 Composer 2.2+ 已被移除,强行用会报 Unknown option: -k。唯一合法的临时方案是环境变量:
Linux/macOS:COMPOSER_DISABLE_TLS=1 composer install
Windows(cmd):set COMPOSER_DISABLE_TLS=1 && composer install
Windows(PowerShell):$env:COMPOSER_DISABLE_TLS="1"; composer install
注意:这会让所有 HTTPS 请求降级为 HTTP,包源域名可能被劫持,**绝不能用于生产环境或 CI 流水线**。
国内镜像源也要证书正常才能用
很多人以为切到阿里云、腾讯云镜像就能绕过证书问题——错。镜像地址仍是 HTTPS,https://mirrors.aliyun.com/composer/ 同样需要校验证书。如果本地证书链损坏,换镜像只是把错误从 packagist.org 换成 mirrors.aliyun.com,本质没解决。
验证是否真修好了:执行 composer config -g repo.packagist composer https://packagist.org 回切官方源,再跑一次 composer clearcache && composer diagnose。如果 diagnose 输出 OK 且没提证书警告,才算搞定。
最常被忽略的一点:PHP-FPM 和 CLI 可能用不同配置文件,php -i | grep php.ini 和 php-fpm -i | grep php.ini 得分别检查。










