答案是系统时间偏差超15分钟、本地ca证书过期或镜像源停服所致;composer 2.2+默认校验packagist元数据gpg签名,三者任一未修复则清缓存、换命令均无效。

Composer 报 “Signature verification failed” 不是包坏了,大概率是本地证书过期、系统时间不准,或镜像源已停服——三者之一没处理对,清缓存、重装、换命令都没用。
为什么 composer install 突然报无效签名?
Composer 2.2+ 默认启用 GPG 签名验证,它不只校验 ZIP 内容(SHA256),还检查元数据(如 packages.json)是否由 Packagist 官方私钥签发。一旦失败,直接中断,不是警告。
- 典型错误:
Signature verification failed、Invalid signature、Key rotation requires a valid internet connection - 根本原因不是网络不通,而是:
– PHP 的openssl.cafile或curl.cainfo指向过期证书(比如仍含已吊销的DST Root CA X3)
– 本地系统时间偏差 >15 分钟(Packagist 时间戳校验严格)
– 镜像源(如packagist.phpcomposer.com)已停服,返回空/伪造响应,签名自然无效
怎么确认是证书问题还是镜像问题?
别猜,用两条命令交叉验证:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 查 PHP 实际加载的证书路径:
php -r "print_r(openssl_get_cert_locations());",看default_cert_file是否存在、可读,且文件里最新证书签发时间是否 ≥2022 年 - 直连 Packagist 官网测试:
curl -I https://packagist.org/packages.json 2>/dev/null | head -1,如果返回HTTP/2 200,说明网络和证书链正常;若报SSL certificate problem,就是证书路径或内容有问题 - 再查当前镜像:
composer config -g repo.packagist,输出如果是{"type": "composer", "url": "https://packagist.phpcomposer.com"}这类旧域名,立刻停用
快速修复:证书 + 镜像双清理
顺序不能错:先确保 HTTPS 能通,再换镜像,否则新镜像也连不上。
- 下载最新
cacert.pem:https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251,保存为纯文本(别用浏览器另存为 HTML) - 配置 PHP:
– Windows:在php.ini中添加两行(路径用正斜杠):openssl.cafile="/path/to/cacert.pem"<br>curl.cainfo="/path/to/cacert.pem"
– Linux/macOS:路径通常为/etc/ssl/certs/ca-certificates.crt,可用sudo cp cacert.pem /etc/ssl/certs/ca-certificates.crt替换 - 重启环境:
php -v确认生效;CLI 模式需新开终端;Apache/Nginx 必须完整重启服务,reload 不行 - 换镜像(阿里云为例):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,注意末尾有斜杠 - 清缓存并强制重拉:
composer clear-cache && composer install --no-cache --prefer-dist
容易被忽略的坑
很多人卡在最后一步,因为忽略了这些细节:
-
composer keys rotate在证书未就位时会失败,别先跑它;必须等curl -I https://packagist.org和composer diagnose都显示 OK 后再执行 - Windows 用户若用 Git Bash,PHP CLI 可能加载的是 Git 自带的 OpenSSL,和 WAMP/XAMPP 的配置不一致,得分别检查两个
php.ini - 清华镜像要求 User-Agent 包含
Composer字样,老版本 Composer(composer self-update - 删
composer.lock再装只适用于可信项目,它绕过了所有历史签名记录,但不会修复底层证书或时间问题










