composer install仅校验下载包的sha-256哈希与composer.lock中dist.shasum是否一致,并强制https连接校验tls证书链,属传输+存储双重哈希校验,非开发者数字签名验证。

Composer 本身不验证开发者数字签名,只校验包内容哈希与元数据来源可信性;真要验证“谁签的”,得靠 Git tag 的 GPG 签名 + 手动操作。
composer install 时实际校验了什么
执行 composer install 时,Composer 做两件事:
- 比对
composer.lock中每个包的dist.shasum和下载 ZIP/TAR 包的实际 SHA-256 值——不匹配就报Signature mismatch或package is corrupted - 强制走 HTTPS 连接(如
https://repo.packagist.org),校验 TLS 证书链,防中间人劫持
这不是数字签名验证,是传输+存储双重哈希校验。它能防篡改、防污染,但不能证明“这个包是 Laravel 官方亲手打包并签名发布的”。
如何启用 Packagist 元数据 GPG 验证
Packagist 自 2021 年起对 packages.json 等元数据文件做 GPG 签名,Composer ≥ 2.2 支持自动校验。不启用,攻击者可能伪造搜索结果、注入恶意包链接。
- 确认版本:
composer --version必须 ≥ 2.2 - 导入公钥:
curl -s https://packagist.org/keys/packagist.pub | gpg --dearmor > /usr/share/keyrings/packagist.gpg - 配置验证开关:
composer config --global signing-key /usr/share/keyrings/packagist.gpg - 验证是否生效:
composer update -vvv中看到Verifying packages.json signature且无报错才算成功
注意:低于 2.5 的版本需手动设 security.signature-verification true,否则 composer show --security 不会显示 Signature verification: enabled。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
怎么验证某个包是不是作者亲签的 Git tag
Composer 对 VCS 类型依赖(如 GitHub/GitLab 仓库)不自动验签,但你可以自己验证维护者是否打了可信 GPG 标签:
- 导入作者公钥:
gpg --keyserver keyserver.ubuntu.com --recv-keys ABCDEF1234567890 - 克隆仓库:
git clone https://github.com/vendor/package.git - 检出 tag 并验证:
git tag -v v2.3.4—— 输出含Good signature且密钥指纹匹配才可信 - 在
composer.json中显式引用该 tag:"vendor/package": "dev-main#v2.3.4",或通过vcs仓库配置 +minimum-stability: stable锁定
如果 git tag -v 显示 Can't check signature: No public key,不是 Composer 的问题,是发布方没打 GPG tag,或你没导入对应公钥。
私有仓库和签名验证的现实限制
私有 Packagist(如 Satis、Private Packagist)默认不参与 Packagist 官方 GPG 验证体系,必须额外配置:
- 自行部署签名服务并生成
packages.json.asc - 在全局或项目级配置
signing-key指向你的私有公钥 - 确保所有团队成员都使用同一套密钥环,否则
composer update会因验签失败中断
最常被忽略的一点:即使启用了全部签名验证,composer.lock 文件本身仍可被人工篡改——它只是个 JSON 文件。所以生产环境必须配合 CI/CD 流程校验 lock 文件完整性(比如 git commit hash 锁定 + 构建时比对),否则整个信任链就断在第一环。










