GPG 签名发布物是什么
用 GPG 为发布包与 Git 标签提供来源与完整性证明:私钥签名,任何人拿到公钥都能验证「是谁发布的、内容有没有被改」。注意签名解决的是来源与完整性,不是加密机密——内容依然明文可读。Maven Central 等公共仓库强制要求对发布包签名,属于供应链安全的最低限度配套。
基本信息
| 场景 | Maven Central 强制 GPG 签名;RPM/DEB 仓库元数据签名;git tag -s |
|---|---|
| 形态 | 分离签名 .asc 或内嵌签名 |
| 验证 | gpg --verify 对照发布方的公钥指纹 |
| 密钥实践 | 子密钥用于签名,主密钥离线保存 |
| 公布 | 指纹写进发布说明,通过独立渠道公布 |
典型使用场景
- 公共仓库发布:Maven Central 等强制签名才收件
- 发行版仓库:RPM/DEB 元数据签名让包管理器可验证
- Git 标签签名:证明标签确实由维护者打出
- 制品分发:为下载包提供 .asc 分离签名
- 密钥轮换:新旧公钥并存过渡,历史版本仍可验证
- 密钥托管:用硬件令牌或受控签名服务承载私钥,减少明文暴露面
签名与验证
签名与验证
gpg --detach-sign -a app-1.9.0.tar.gz # 生成分离签名 .asc
gpg --verify app-1.9.0.tar.gz.asc app-1.9.0.tar.gz # 本地验证
gpg --fingerprint <keyid> # 核对指纹(与发布说明比对)
git tag -s v1.9.0 -m "release 1.9.0" # 给标签签名
git verify-tag v1.9.0 # 验证标签签名验证结果读法
| 输出 | 含义 | 处理 |
|---|---|---|
| Good signature | 签名有效 | 再核对指纹是否与发布方一致 |
| BAD signature | 内容被改动 | 停止使用该制品并上报 |
| Can't check signature | 缺公钥 | 导入发布方公钥后重试 |
签名密钥等同于发布身份:使用子密钥签名、主密钥离线,公开指纹与轮换说明;日常签名用子密钥,主密钥只在轮换时出动。
签名不等于加密:只验证来源与完整性,任何人拿到文件仍可读取内容;对外文档同时给出公钥获取方式与验证命令。