跳转到内容

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签名可确认代码修改来源:

gitGraph commit id: "Unsigned" commit id: "Verified" tag: "Valid SIG by Alice" branch feature commit id: "Verified" tag: "Valid SIG by Bob"

密钥管理进阶[编辑 | 编辑源代码]

子密钥使用[编辑 | 编辑源代码]

为不同设备生成子密钥增强安全性:

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密钥,开发者可以建立可验证的代码修改历史,这对开源协作和企业开发都至关重要。