Featured image of post 使用 GPG 或 SSH 和验证徽章签署 Git 提交Featured image of post 使用 GPG 或 SSH 和验证徽章签署 Git 提交

使用 GPG 或 SSH 和验证徽章签署 Git 提交

通过配置 ssh 或 gpg 代理来签署 git 提交、验证 Github 上的身份标签来保护项目分支。

在 GitHub 上查看提交日志时,您可能会注意到某些提交旁边有一个绿色的“已验证”徽章。此标签表明提交已经过加密签名并确认来自合法的、经过验证的用户。

默认情况下,Git 允许开发人员使用 git config user.email 等简单命令配置他们选择的任何名称和电子邮件地址。这意味着冒充是微不足道的。为了保证身份验证并防止未经授权的贡献,强烈建议提交签名

在本指南中,我们将探讨如何使用 GPG 或 SSH 密钥设置 Git 提交签名,以在 GitHub 上获得您自己的“已验证”徽章。


1.什么是提交签名?

当您运行 git commit 命令时,提交签名使用公钥加密技术将数字签名附加到提交数据。

这保证了两个关键的安全概念:

  • 不可否认性:验证提交确实是由密钥所有者创作的。
  • 数据完整性:确保自应用签名以来提交元数据和文件更改未被修改或篡改。

虽然 GPG (GNU Privacy Guard) 密钥历来是唯一的选择,但 Git 现在原生支持使用 SSH 密钥 进行提交签名,这使得已经使用 SSH 密钥推送代码的开发人员的设置变得更加简单。在本指南中,我们将重点关注 SSH 密钥签名。


2. 设置 SSH 密钥提交签名

第 1 步:找到或生成 SSH 密钥

确定 SSH 公钥的路径(通常为 ~/.ssh/id_ed25519.pub)。如果您没有,请使用以下命令生成它:

ssh-keygen -t ed25519 -C "[email protected]"

步骤 2:配置 Git 使用 SSH 进行签名

运行以下命令告诉 Git 使用您的 SSH 密钥对提交进行签名:

# Instruct Git to use SSH as the cryptographic format
git config --global gpg.format ssh

# Point Git to your SSH public key file
git config --global user.signingkey ~/.ssh/id_ed25519.pub

步骤 3:启用全局自动签名

为了避免在每次提交时手动输入 -S ,请将 Git 配置为自动签署所有提交:

git config --global commit.gpgsign true

3. 向 GitHub 注册密钥

为了让 GitHub 验证签名,您必须将公共签名密钥上传到您的个人资料:

  1. 复制您的公钥的内容(例如 cat ~/.ssh/id_ed25519.pub)。
  2. 导航到您的 GitHub 个人资料,然后转到 设置 > SSH 和 GPG 密钥
  3. 单击“新 SSH 密钥”。
  4. 密钥类型 下拉菜单中,选择 签名密钥(而不是身份验证密钥)。
  5. 粘贴您的公钥并单击“添加 SSH 密钥”。

4. 验证配置

在存储库中创建一个虚拟提交:

git commit -m "chore: test signed commit"

您可以使用 log 命令在本地检查签名:

git log --show-signature -n 1

如果成功,您将看到以下开头的验证日志: 占位符_0

推送后,GitHub 将在您的提交旁边显示绿色的“已验证”徽章。


结论

设置提交签名是一种快速、高效的安全升级。借助现代 Git 版本中基于 SSH 的签名的支持,配置此安全网比以往更加简单。保护您的代码身份并立即开始签署您的提交。