GPG 管理提交签名验证

1,612 阅读3分钟

关于提交签名验证

您可以本地签名提交和标记,以便其他人确认您的工作来自可信的来源。 如果提交或标记具有密码可验证的 GPG 或 S/MIME 签名,则 GitHub 会将提交或标记标示为已验证。

如果提交或标记具有无法验证的签名,则 GitHub 会将提交或标记标示为未验证。

img

安装GPG命令行工具

GPG 并未默认安装在 OS X 或 Windows 上。 要安装 GPG 命令行工具,请参阅 GnuPG 的下载页面

也可以用 过 Homebrew 来安装 brew install gnupg

检查现有 GPG 密钥

在生成 GPG 密钥之前,您可以检查是否有任何现有的 GPG 密钥。

$ gpg --list-secret-keys --keyid-format LONG

检查命令输出以查看是否有 GPG 密钥对。

生成新的 GPG 密钥

如果没有现有的 GPG 密钥,您可以生成新的 GPG 密钥以用于签名提交和标记。

  1. 生成 GPG 密钥对

    $ gpg --full-generate-key
    
  2. 在提示时,指定要生成的密钥类型,或按 Enter 键接受默认的 RSA and RSA

  3. 输入所需的密钥长度。 密钥必须至少是 4096 位。

  4. 输入密钥的有效时长。 按 Enter 键将指定默认选择,表示该密钥不会过期。

  5. 验证您的选择是否正确。

  6. 输入您的用户 ID 信息。

  7. 输入安全密码。

  8. 列出您拥有其公钥和私钥的 GPG 密钥。 签名提交或标记需要私钥。在此例中,GPG 密钥 ID 是0B4436F611DCD0EC

    $ gpg --list-secret-keys --keyid-format LONG
     /Users/xsky/.gnupg/pubring.kbx
     ------------------------------
     sec   rsa4096/0B4436F611DCD0EC 2021-01-06 [SC]
           B9476F6DF471A45A0CFDF9710B4436F611DCD0EC
     uid                 [ 绝对 ] linsheng (Github key) <linsheng1@xsky.com>
     ssb   rsa4096/15B24F4064D2384D 2021-01-06 [E]
    
  9. 生成GPG密匙

    $ gpg --armor --export 0B4436F611DCD0EC
    
  10. 复制 GPG 密钥,从 -----BEGIN PGP PUBLIC KEY BLOCK----- 开始,到 -----END PGP PUBLIC KEY BLOCK----- 结束。

新增 GPG 密钥到 GitHub 帐户

要配置 GitHub 帐户使用新的(或现有)GPG 密钥,您还需要将其添加到 GitHub 帐户。

  1. 在任何页面的右上角,单击您的个人资料照片,然后单击 Settings(设置)

  2. 在用户设置侧边栏中,单击 SSH and GPG keys(SSH 和 GPG 密钥)

  3. 单击 New GPG key(新 GPG 密钥)

  4. 在 "Key"(密钥)字段中,粘贴在生成新的 GPG 密钥时复制的 GPG 密钥。

    密钥字段

  5. 单击 Add GPG key(添加 GPG 密钥)

  6. 要确认操作,请输入您的 GitHub 密码。

将您的签名密钥告知 Git

要在本地对提交签名,您需要通知 Git 您想要使用的 GPG 密钥。

1. 在 Git 中设置 GPG 签名密钥,请粘贴下面的文本,替换您想要使用的 GPG 密钥 ID。 在此例中,GPG 密钥 ID 是 0B4436F611DCD0EC

$ git config --global user.signingkey 0B4436F611DCD0EC

  1. 如果没有使用 GPG Suite,请粘贴下面的文本以将 GPG 密钥添加到您的 bash 配置文件:

    $ test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
    $ echo 'export GPG_TTY=$(tty)' >> ~/.profile
    

    **注:**如果您没有 .bash_profile,此命令会将 GPG 密钥添加到 .profile

  2. 如果在加密时意外退出,在加密时会报错: error: gpg failed to sign the data,此时运行gpgconf --kill gpg-agent重启gpg-agent

对提交签名

可以使用 GPG 在本地对提交进行签名。在计算机上的任何本地仓库中默认对所有提交签名,请运行

$ git config --global commit.gpgsign true

要存储 GPG 密钥密码,以便无需在每次对提交签名时输入该密码,我们建议使用以下工具:

  • 对于 Mac 用户,GPG Suite 允许您在 Mac OS 密钥链中存储 GPG 密钥密码。
  • 对于 Windows 用户,Gpg4win 将与其他 Windows 工具集成。
  1. 当本地分支中的提交更改时,请将 S 标志添加到 git commit 命令:

    $ git commit -S -m your commit message

  2. 如果您使用 GPG,则创建提交后,提供您生成 GPG 密钥时设置的密码。

  3. 在本地完成创建提交后,将其推送到 GitHub 上的远程仓库:git push

  4. 查看关于已验证签名的更多详细信息,请单击 Verified(已验证)。

    已签名提交