Featured image of post 为 Git 配置 GPG 签名

为 Git 配置 GPG 签名

- 从此让你的 Git 提交 / 追溯更加安全

前言

在 Git 中,GPG 签名是一种非常重要的安全机制,它可以确保提交的真实性,防止提交被篡改。

Git 的 user.name 和 user.email 是可以随便填的,任何人都能用你的名字和邮箱提交代码。而 GPG 签名用的是只有你自己持有的私钥,别人伪造不了。本文将介绍如何为 Git 配置 GPG 签名。

原理

签名和验证的过程大致如下:

GPG 签名与验证流程

  • 私钥留在本地,git commit 时用它给提交签名;
  • 公钥上传到 GitHub(或其他平台),平台用它验证签名,通过后在提交旁显示 Verified。

生成 GPG 密钥

首先,我们需要生成 GPG 密钥。如果你已经有 GPG 密钥,可以跳过这一步。

1
gpg --full-generate-key

接下来,按照提示选择密钥类型、有效期,并输入你的姓名、电子邮件地址和密码。

这里填的邮箱要和 Git 的 user.email 一致,并且是 GitHub 账号里已验证的邮箱,否则 GitHub 上会显示 Unverified。

配置 Git 使用 GPG 签名

首先,我们需要查询 GPG 密钥的 ID:

1
gpg --list-secret-keys --keyid-format=long

输出中 sec 一行斜杠后面的那串就是密钥 ID:

查看密钥 ID 并验证签名

随后将你的密钥告知 Git:

1
git config --global user.signingkey <GPG_KEY_ID>

然后,我们需要告诉 Git 使用 GPG 签名提交和标签:

1
2
git config --global commit.gpgsign true
git config --global tag.gpgSign true

如果提示 gpg failed to sign the data

GPG 需要知道当前终端才能弹出密码输入框,把下面这行加到 ~/.zshrc 或 ~/.bashrc:

1
export GPG_TTY=$(tty)

macOS 上推荐用 pinentry-mac 弹窗输入密码(还能存进钥匙串):

1
2
3
brew install gnupg pinentry-mac
echo "pinentry-program $(brew --prefix)/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
gpgconf --kill gpg-agent

上传公钥到 GitHub

导出公钥(ASCII 格式):

1
gpg --armor --export <GPG_KEY_ID>

复制从 -----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 中默认显示签名信息,可以使用以下命令:

1
git config --global log.showSignature true

也可以临时查看或单独验证某个提交:

1
2
git log --show-signature -1
git verify-commit HEAD

看到 Good signature from ... 就说明签名有效。

结语

至此,你已经成功为 Git 配置了 GPG 签名。从此,你的 Git 提交 / 追溯更加安全。祝你使用愉快!

参考

转载需要保留原始链接,未经明确许可,禁止商业使用。支持原创 CC BY-NC-SA 4.0
2026-11-01 | 10:00:00 CST
由 Hugo 强力驱动