Featured image of post 给Git的commit添加GPG验证

给Git的commit添加GPG验证

让GitHub上的commit不再显示为Unverified而是显示为Verified

给Git的commit添加GPG验证

使用Git和GitHub的都知道,只要别人知道了你的邮件就可以以你的名义推送代码,所以在GitHub上,只要你没有给代码添加GPG验证,就会显示此次commit为黄色的:Unverified 如下。

image-20220925032722687

而commit有了GPG验证以后就有了绿色的:Verified 如下。

image-20220925032642461

Github文档

关于提交签名验证

主要分为以下步骤:

  1. 检查现有的 GPG 密钥
  2. 生成新的 GPG 密钥
  3. 将 GPG 密钥添加到您的 GitHub 帐户
  4. 告诉 Git 你的签名密钥
  5. 签署提交
  6. 标志标签

但是我建议只是看看就可以了,还是直接按我下面的来的更快。

生成GPG

下面两个命令都可以

1
2
gpg --full-generate-key #这个需要完成下面两步
gpg --default-new-key-algo rsa4096 --gen-key #可以跳过下面两步

这一步加密方法,默认回车就可以。

1
2
3
4
5
6
7
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
  (14) Existing key from card
Your selection?

长度务必写4096,要不然GitHub不支持。

1
2
3
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits

如果你选择下面这种方式,现在可以开始了,下面的步骤就开始是两种创建方式都需要的了

1
gpg --default-new-key-algo rsa4096 --gen-key

直接两个回车,GPG永不过期。

1
2
3
4
5
6
7
8
9
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N)y

然后信息按照你想填的来,注意!Email必须是你GitHub验证过的邮箱,或者是你的登陆邮箱。

1
2
3
4
5
6
7
8
9
GnuPG needs to construct a user ID to identify your key.

Real name: frelon
Email address: [email protected]
Comment: test
You selected this USER-ID:
    "frelon (test) <[email protected]>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o

这一步你就需要填写密码了,要记住哦!以后每一次commit都需要 输入密码。

1
2
3
4
5
6
7
8
┌──────────────────────────────────────────────────────┐
│ Please enter the passphrase to                       │
│ protect your new key                                 │
│                                                      │
│ Passphrase: ________________________________________ │
│                                                      │
│       <OK>                              <Cancel>     │
└──────────────────────────────────────────────────────┘

看到这一步那GPG就是创建完成了。

1
2
3
4
5
6
7
8
9
We need to generate a lot of random bytes. It is a good idea to perform
... ...
public and secret key created and signed.

Note that this key cannot be used for encryption.  You may want to use
the command "--edit-key" to generate a subkey for this purpose.
pub   ... ...
      CECxxxxxx62B
uid   frelon <[email protected]>

可以用下面的命令查看创建的GPG的长格式。

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

大概内容如下:

1
2
3
sec   rsa4096/22B4B8515915762B 2022-09-24 [SC] [expires: 2024-09-23]
      CEC47723D9BF723D6709CE0722B4B8515915762B
uid                 [ultimate] frelon <[email protected]>

在GitHub添加GPG密钥

GitHub文档在此:Add a GPG key

首先导出 Public Key

1
gpg --armor --export  22B4B8515915762B

大概内容如下:

1
2
3
4
5
6
7
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBGMvXnEBEAC30FGoWxFPnPBcWTI28w4ZRFrNs126RsvImapeXLQR+Y7fEYLN
... ...
t66fFPRKLh3VtYVqIZNhTun98fL786U+UYURZlNzJvj2toYjoxntg3nXgxem
=uc2y
-----END PGP PUBLIC KEY BLOCK-----

然后复制!去GitHub操作。

  1. 在任何页面的右上角,单击个人资料照片,然后单击“设置”。
  2. In the “Access” section of the sidebar, click SSH and GPG keys.
  3. 单击“新建 GPG 密钥”。
  4. 在“密钥”字段中,粘贴生成 GPG 密钥时复制的 GPG 密钥。
  5. 单击“添加 GPG 密钥”
  6. 要确认操作,请输入您的 GitHub 密码。

配置Git使用GPG验证commit

让Git使用GPG

1
git config --global user.signingkey 22B4B8515915762B

然后将 GPG 密钥添加到 .zshrc 启动文件

1
2
[ -f ~/.zshrc ] && echo 'export GPG_TTY=$(tty)' >> ~/.zshrc
source ~/.zshrc

Git commit 测试

在本地分支中提交更改时,将 -S 标志添加到 git commit 命令:

1
git commit -S -m "your commit message"

在创建提交后输入生成 GPG 密钥时设置的密码。

在本地完成创建提交后,将它们推送到 GitHub 上的远程存储库:

然后就可以发现我们push的commit就变成了 verified