Composer不校验镜像包PGP签名,仅强制校验dist.sha256哈希值与HTTPS传输安全;Packagist元数据GPG签名需Composer≥2.2且正确配置repos.packagist(非repo.packagist)才能启用,否则静默跳过。

Composer根本不会校验镜像包的PGP签名
它压根不支持这个能力——所谓“镜像包PGP签名”是常见误解。Packagist 官方确实为 packages.json 提供 GPG 签名,但仅用于防元数据投毒;而国内镜像(如阿里云、腾讯云)普遍不转发 signature 字段,导致 Composer 在请求镜像时自动降级为无签名验证模式。你看到的“Signature mismatch”错误,99% 是 dist.sha256 哈希比对失败,不是 PGP 验签失败。
为什么 composer config -g repo.packagist 会绕过签名验证
这条命令直接替换源类型为镜像源,Composer 就不再读取 Packagist 元数据里的 signature 字段。结果就是:
- 所有
packages.json请求走镜像 HTTPS,但响应里没有signature字段 -
composer install不报错,也不触发 GPG 验签,静默跳过 - 即使你配了
signing-key或开了security.signature-verification,也完全无效
真正生效的配置必须用 repos.packagist(复数),且只代理元数据:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer config -g repos.packagist.type composer<br>composer config -g repos.packagist.url https://mirrors.aliyun.com/composer/
如何确认签名验证真正在跑
光设配置没用,得看实际日志和诊断输出:
- 运行
composer diagnose,必须同时看到secure-http: OK和signature verification: OK - 加
-v运行composer install,日志中出现Verifying packages.json signature with key才算触发 - 若只看到
Downloading https://mirrors.aliyun.com/composer/packages.json却没验签日志,说明镜像配置仍错位 -
composer show --security输出里要有Signature verification: enabled
dist.sha256 是唯一落地生效的校验机制
它不依赖镜像是否支持签名,只要 composer.lock 里有有效值,安装时就会强制比对:
- 打开
composer.lock,找某个包的"dist": { "shasum": "..." },值必须是 64 字符长的 SHA-256 - 手动改一个
shasum为"0000",再运行composer install—— 必须中断并报Signature mismatch - 若没报错,检查是否用了
--ignore-platform-reqs、--no-scripts或删过缓存导致跳过校验逻辑 - CI 流水线建议加一步:
COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict,离线复核 vendor 文件完整性
真正的安全控制点不在镜像是否“带签名”,而在 lock 文件是否被信任、shasum 是否未被清空、元数据是否经 HTTPS+GPG 双重保护——这三者缺一不可,且任何一环被镜像配置破坏,就等于整个链条断裂。

















