Composer不支持非对称加密数字签名,“verify-signature”命令不存在,仅通过dist.sha256哈希比对校验包完整性,不验证发布者身份,也不依赖公钥体系;dist.sha256是内容哈希而非密码学签名,无法绑定作者身份,且仅校验dist包、不覆盖source安装与vendor中生成文件。

Composer 不支持基于非对称加密的包数字签名,所谓“签名校验”是常见误解。 它只做 dist 包的 SHA-256 哈希比对,不验证发布者身份,也不依赖公钥/私钥体系。
composer verify-signature 为什么报错或不存在
这个命令根本不是 Composer 官方功能。截至 Composer 2.7.x(2026 年 6 月最新稳定版),composer verify-signature 未被实现,任何文档或博客中提及该命令,基本源于混淆 Packagist 内部 API 与用户端能力。
- 搜索到的第三方插件如
composer/composer-signature-checker已多年未维护,且使用废弃的openssl_pkey_get_public,在 PHP 8.1+ 上直接 fatal error - 在
composer.json中手动添加"signature": "..."字段会被完全忽略——Composer 解析器不识别该 key -
composer update --lock只更新时间戳,不生成、不刷新、不验证任何密码学签名
dist.sha256 是什么,它和数字签名有什么区别
dist.sha256 是哈希值,不是签名。它记录在 composer.lock 中,仅用于下载后校验 zip/tar 包内容是否与 Packagist 存档一致,但无法回答“这个包是谁发布的”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 它不绑定发布者身份:任何人上传同名同版本包,只要哈希一致,Composer 就认为“合法”
- 它不防中间人篡改元数据:若镜像源替换 dist URL 却未同步原始哈希(如某些自建镜像延迟或误配),校验仍会“成功”
- 它不覆盖 source 包:
--prefer-source或"preferred-install": {"*": "source"}会跳过整个dist.sha256校验链 - 它不保护 vendor/autoload.php 等引导文件:这些文件不在哈希校验范围内,被注入恶意代码也不会触发告警
如何确认当前配置是否真正在校验哈希
不能只看 composer install 是否成功,得验证校验逻辑是否实际运行。
- 检查
composer.lock中任意包的dist段,确认存在长度为 64 的"sha256": "a1b2c3..."字段(不是 40 位 SHA-1) - 执行
composer install -v,观察输出中是否出现Downloading https://...和Extracting archive;若看到Cloning,说明走了 git,哈希校验已绕过 - 运行
composer diagnose,必须同时看到secure-http: OK和signature verification: OK—— 后者才是关键,代表 Packagist 官方签名字段(非用户侧)被读取并参与校验 - 避免误配镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/会彻底替换源,导致signature verification: OK永远不会出现
真正需要签名验证时该怎么办
如果项目要求强来源可信(如金融、政务类系统),不能依赖 Composer 自身机制,需外部组合控制:
- 强制所有包走 Packagist 官方源:禁用
repositories自定义源,或严格审计私有源签名流程 - CI 中加离线校验:用
composer show --locked --format=json提取哈希,再用shasum -a 256 vendor/*/composer.json手动比对——注意路径映射需准确,且需排除.git/、tests/等非发布内容 - 对高敏感包(如
monolog/monolog、symfony/http-kernel)单独白名单 + 预签名校验脚本,配合COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict回检 - 接受现实:PHP 生态尚未将非对称签名作为基础设施;目前最接近“签名”的实践,是 Docker 镜像用
cosign签署,而非 Composer 包
容易被忽略的是:哈希校验只发生在安装那一刻,vendor 目录一旦写入,后续任何篡改(包括 autoload.php 被改写)Composer 都无感。生产环境设 chmod -R a-w vendor/ 比寄希望于“自动签名验证”更实际。

















