前言
在 Git 中,GPG 签名是一种非常重要的安全机制,它可以确保提交的真实性,防止提交被篡改。
Git 的 user.name 和 user.email 是可以随便填的,任何人都能用你的名字和邮箱提交代码。而 GPG 签名用的是只有你自己持有的私钥,别人伪造不了。本文将介绍如何为 Git 配置 GPG 签名。
原理
签名和验证的过程大致如下:
- 私钥留在本地,
git commit时用它给提交签名; - 公钥上传到 GitHub(或其他平台),平台用它验证签名,通过后在提交旁显示 Verified。
生成 GPG 密钥
首先,我们需要生成 GPG 密钥。如果你已经有 GPG 密钥,可以跳过这一步。
| |
接下来,按照提示选择密钥类型、有效期,并输入你的姓名、电子邮件地址和密码。
这里填的邮箱要和 Git 的
user.email一致,并且是 GitHub 账号里已验证的邮箱,否则 GitHub 上会显示 Unverified。
配置 Git 使用 GPG 签名
首先,我们需要查询 GPG 密钥的 ID:
| |
输出中 sec 一行斜杠后面的那串就是密钥 ID:
随后将你的密钥告知 Git:
| |
然后,我们需要告诉 Git 使用 GPG 签名提交和标签:
| |
如果提示 gpg failed to sign the data
GPG 需要知道当前终端才能弹出密码输入框,把下面这行加到 ~/.zshrc 或 ~/.bashrc:
| |
macOS 上推荐用 pinentry-mac 弹窗输入密码(还能存进钥匙串):
| |
上传公钥到 GitHub
导出公钥(ASCII 格式):
| |
复制从 -----BEGIN PGP PUBLIC KEY BLOCK----- 到 -----END PGP PUBLIC KEY BLOCK----- 的全部内容,打开 GitHub → Settings → SSH and GPG keys → New GPG key,粘贴保存即可。
之后推送的签名提交,在 GitHub 上就会显示 Verified 标记。
配置 Git 使用 GPG 签名追溯
如果你想要在 git log 中默认显示签名信息,可以使用以下命令:
| |
也可以临时查看或单独验证某个提交:
| |
看到 Good signature from ... 就说明签名有效。
结语
至此,你已经成功为 Git 配置了 GPG 签名。从此,你的 Git 提交 / 追溯更加安全。祝你使用愉快!