给Git的commit添加GPG验证
使用Git和GitHub的都知道,只要别人知道了你的邮件就可以以你的名义推送代码,所以在GitHub上,只要你没有给代码添加GPG验证,就会显示此次commit为黄色的:Unverified
如下。
而commit有了GPG验证以后就有了绿色的:Verified
如下。
Github文档
关于提交签名验证
主要分为以下步骤:
- 检查现有的 GPG 密钥
- 生成新的 GPG 密钥
- 将 GPG 密钥添加到您的 GitHub 帐户
- 告诉 Git 你的签名密钥
- 签署提交
- 标志标签
但是我建议只是看看就可以了,还是直接按我下面的来的更快。
生成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操作。
- 在任何页面的右上角,单击个人资料照片,然后单击“设置”。
- In the “Access” section of the sidebar, click SSH and GPG keys.
- 单击“新建 GPG 密钥”。
- 在“密钥”字段中,粘贴生成 GPG 密钥时复制的 GPG 密钥。
- 单击“添加 GPG 密钥”
- 要确认操作,请输入您的 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 。