signature verification failed 的根本原因是本地环境与 packagist 信任链断裂,须按顺序排查系统时间偏差>5分钟、ca证书过期(如含dst root ca x3)、镜像停服或未同步新签名三者,清缓存无效,必须交叉验证时间与证书、确认镜像有效性,并同步删除vendor和composer.lock后切回官方源重装。

Signature verification failed 是时间、证书或镜像三者之一断了
这不是 Composer “坏了”,而是本地环境与 Packagist 信任链的某个环节失效。它不报错细节,只中断安装,常见现象是 Signature verification failed 或 Invalid signature 直接退出,连 warning 都没有。
必须按顺序排查,跳过任一环都白忙:先确认系统时间是否偏差 >5 分钟(JWT 时间戳校验极严格),再查 PHP 加载的 CA 证书是否含已吊销的 DST Root CA X3,最后才看镜像是否停服或未同步新签名。
-
php -r "print_r(openssl_get_cert_locations());"输出的default_cert_file路径是否存在、可读,且文件里最新证书签发时间 ≥ 2022 年 -
curl -I https://packagist.org/packages.json 2>/dev/null | head -1必须返回HTTP/2 200;若报SSL certificate problem,说明证书链本身不通 -
composer config -g repo.packagist若输出含https://packagist.phpcomposer.com等旧域名,该镜像已于 2025 年底终止服务,必须立刻停用
镜像源配置必须带斜杠、显式 type、且键名不能错
配错镜像不会报错,而是静默 fallback 到官方源,导致你根本没走镜像——但又因证书或时间问题连不上官方源,最终卡在签名验证失败。
合法配置只有一种写法:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾 / 和中间 composer 类型参数)。
- 键名只能是
repo.packagist,repos.packagist或repositories.packagist全无效 - URL 必须以
/结尾,否则拼路径变成/composerpackages.json→ 404 → 退回官方源 - 项目级配置优先于全局,只要
composer.json里有"repositories"字段(哪怕空数组),全局设置就彻底失效
删 vendor 和 composer.lock 才能真正重跑校验
composer clear-cache 对签名失败完全无效——它只清下载缓存,不碰时间、证书、锁文件。而 composer update 默认复用 composer.lock 里的旧哈希,根本不会刷新 dist.sha256 或 signature 字段。
唯一能强制重新走完整校验流程的操作,是同时清除两样:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:
rm -rf vendor composer.lock - Windows:
rd /s /q vendor & del composer.lock - 执行前建议备份:
cp composer.lock composer.lock.bak
删完后切回官方源重装:composer config -g --unset repos.packagist && composer config -g repo.packagist composer https://packagist.org && composer clear-cache && composer install。成功后再决定是否切回镜像(建议等满 30 分钟,或换华为云)。
allow-plugins 不匹配会静默破坏 GPG 验证
Composer 2.2+ 启用的 packages.json GPG 签名验证,依赖 allow-plugins 配置。如果项目或全局设置了 "allow-plugins": false 或显式禁用了 composer/installers 等插件,GPG 验证会被跳过——你以为开了,其实没验。
检查方式:composer config -g allow-plugins 或查看项目 composer.json 中是否有 allow-plugins 字段。修复方法是显式放行:
composer config -g allow-plugins.'composer/installers' true composer config -g allow-plugins.'dealerdirect/phpcodesniffer-composer-installer' true
注意:不要设为 true 全开,只放行必要插件;否则可能触发安全策略拒绝安装。
最常被忽略的是时间偏差和证书路径——它们发生在 PHP 底层,和 Composer 命令本身无关,所以重装 Composer、换镜像、清缓存全无作用。先用两条命令交叉验证,再动配置。










