Git GPG密钥
外观
Git GPG密钥[编辑 | 编辑源代码]
GPG密钥(GNU Privacy Guard Key)是Git中用于验证提交和标签真实性的加密工具。通过将GPG密钥与Git提交关联,开发者可以证明代码修改确实由其本人完成,防止伪造身份或篡改历史记录。本指南将详细介绍GPG密钥的生成、配置及在Git中的实际应用。
核心概念[编辑 | 编辑源代码]
GPG密钥基于非对称加密体系,包含:
- 私钥(Private Key):本地存储,用于签名操作(需严格保密)
- 公钥(Public Key):可公开分发,用于验证签名
数学原理可表示为: 解析失败 (语法错误): {\displaystyle \text{签名} = \text{Encrypt}(\text{提交哈希}, \text{私钥}) \\ \text{验证} = \text{Decrypt}(\text{签名}, \text{公钥}) == \text{提交哈希} }
密钥生成[编辑 | 编辑源代码]
安装GPG工具[编辑 | 编辑源代码]
各操作系统安装方法:
- Linux:
sudo apt-get install gnupg
- macOS:
brew install gnupg
- Windows: 下载Gpg4win
生成密钥对[编辑 | 编辑源代码]
gpg --full-generate-key
交互过程示例:
1. 选择密钥类型:RSA and RSA
(默认)
2. 密钥长度:4096
(推荐)
3. 过期时间:建议设置(如1y
)
4. 输入用户信息(需与Git配置一致)
5. 设置保护密码
查看密钥[编辑 | 编辑源代码]
gpg --list-secret-keys --keyid-format LONG
输出示例:
sec rsa4096/3AA5C34371567BD2 2023-01-01 [SC] [expires: 2024-01-01] ABCDEF1234567890ABCDEF1234567890ABCDEF12 uid [ultimate] Your Name <your.email@example.com> ssb rsa4096/42B317FD4BA89E7A 2023-01-01 [E]
Git集成配置[编辑 | 编辑源代码]
告知Git使用密钥[编辑 | 编辑源代码]
复制密钥ID(示例中为3AA5C34371567BD2
)并配置:
git config --global user.signingkey 3AA5C34371567BD2
签名提交[编辑 | 编辑源代码]
强制所有提交签名:
git config --global commit.gpgsign true
或单次签名:
git commit -S -m "Signed commit message"
实际案例[编辑 | 编辑源代码]
开源项目要求[编辑 | 编辑源代码]
Linux内核等开源项目强制要求GPG签名提交。未签名提交会被拒绝:
remote: ERROR: Missing GPG signature for commit abc123 remote: Hint: Use 'git commit -S'
团队协作验证[编辑 | 编辑源代码]
通过GPG签名可确认代码修改来源:
密钥管理进阶[编辑 | 编辑源代码]
子密钥使用[编辑 | 编辑源代码]
为不同设备生成子密钥增强安全性:
gpg --edit-key 3AA5C34371567BD2
addkey
密钥吊销[编辑 | 编辑源代码]
创建吊销证书(需安全存储):
gpg --gen-revoke 3AA5C34371567BD2 > revoke.asc
常见问题[编辑 | 编辑源代码]
问题 | 解决方案 |
---|---|
gpg: signing failed: No secret key |
确保gpg-agent 运行且密钥已导入
|
GitHub/GitLab不显示"Verified" | 需上传公钥到代码托管平台 |
忘记密码 | 只能生成新密钥并更新所有提交 |
安全最佳实践[编辑 | 编辑源代码]
- 使用硬件安全模块(如YubiKey)存储私钥
- 定期轮换密钥(建议每年一次)
- 为CI系统配置单独的部署密钥
- 禁用过期或泄露的密钥
通过GPG密钥,开发者可以建立可验证的代码修改历史,这对开源协作和企业开发都至关重要。