概述

GPG 是一种加密算法,在 Git 中提交 Commit 时可以使用 GPG 进行加密,来保证提交的 Commit 没有被篡改,具体体现在 Github 提交的时候会有一个 verified 的标志。
QQ截图20200121153639.png

这里我是在 Windows 下操作来生成 GPG 密钥的,其他系统环境下操作可能会有不同

准备工作

生成GPG密钥之前,可以检查当前电脑是否存在有 GPG 密钥

1 打开 Git Bash
2 使用 gpg --list-secret-keys --keyid-format LONG 命令列出同时具有公共密钥和私有密钥的GPG密钥。签名提交或标记需要私钥。

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

3 检查命令输出以查看是否具有 GPG 密钥
如果没有GPG密钥对,则生成一个新的GPG密钥
2020-01-21T08:02:03.png

生成一个新的GPG密钥

1 下载并安装适用于您的操作系统的 GPG 命令行工具,这里我安装的是 Windows 版
官方下载地址:https://www.gnupg.org/download/
2020-01-21T08:09:25.png
2020-01-21T08:09:41.png
下载完成后一路下一步安装即可
2 打开 Git Bash
3 生成一个GPG密钥
如果您使用的是2.1.17或更高版本,请粘贴以下文本以生成GPG密钥

$ gpg --full-generate-key

如果您未使用2.1.17或更高版本,则该gpg --full-generate-key命令不起作用。粘贴下面的文本,然后跳到步骤6。

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

4 这里让选择加密算法,这里我使用的默认的RSA and RSA
2020-01-21T08:15:39.png

5 这里让选择密钥长度,我选择 4096
2020-01-21T08:17:19.png

6 这里让输入密钥有效的时间长度。这里我选择默认,表示该密钥没有过期时间,即永不过期
2020-01-21T08:19:20.png

7 这里让再次确认一下
2020-01-21T08:19:43.png

8 输入用户的ID信息
2020-01-21T08:32:09.png
依次输入真实姓名、电子邮件地址和注释组合成用户标识,其中注释这一栏可以省略
确认输入的信息是否正确,输入O确认
2020-01-21T08:48:47.png

9 这里让输入密码来保护秘钥
2020-01-21T08:50:38.png

连续输入两次密码,一个 GPG 密钥就创建完毕了

10 这时可以使用 gpg --list-secret-keys --keyid-format LONG 命令来列出同时具有公共密钥和私有密钥的GPG密钥

11 从GPG密钥列表中,复制您要使用的GPG密钥ID,在此示例中,GPG密钥ID为3AA5C34371567BD2

$ gpg --list-secret-keys --keyid-format LONG
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot 
ssb   4096R/42B317FD4BA89E7A 2016-03-10

12 使用以下命令来打印出指定ID的GPG密钥,将命令中的ID替换为你的GPG密钥ID

$ gpg --armor --export 3AA5C34371567BD2
# Prints the GPG key ID, in ASCII armor format

13 复制您的GPG密钥,以-----BEGIN PGP PUBLIC KEY BLOCK-----开头和-----END PGP PUBLIC KEY BLOCK-----结尾

将GPG密钥添加到您的GitHub帐户

1 在Github的右上角,点击个人资料照片,然后点击设置
2020-01-21T09:01:50.png

2 用户设置边栏中,点击SSH and GPG keys
2020-01-21T09:18:50.png

3 点击新建 New GPG key
2020-01-21T09:19:13.png

4 粘贴刚刚复制的 GPG key,可以将其备份起来,方便以后导入
2020-01-21T09:20:06.png

5 输入Github密码,确认操作,GPG密钥就添加到Github中了

开启全局GPG签名

git config --global user.signingkey 3AA5C34371567BD

测试

$ git commit -a -S -m "add test.txt"

命令中的-S即是开启GPG签名,这样每次提交的时候都要加上-S,输入GPG的密码即可提交成功
2020-01-21T09:56:51.png
2020-01-21T09:59:34.png
如果默认就自动使用GPG签名的话,可以设置提交的时候默认使用GPG签名

git config --global commit.gpgsign true

导出GPG密钥

在多台电脑上操作的时候经常会涉及到 GPG 公钥/私钥的导入导出,比方说 GitHub 支持 GPG 加密 Commit,在多台电脑上使用相同的 Key 可以省去很多配置工作。

1 列出本地所有的密钥,"3AA5C34371567BD2"即是密钥ID

$ gpg --list-secret-keys --keyid-format LONG
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot 
ssb   4096R/42B317FD4BA89E7A 2016-03-10

2 根据ID导出相应的公钥和私钥,并输入密码,即可导出到用户目录下

gpg --output mygpgkey_pub.gpg --armor --export 3AA5C34371567BD2
gpg --output mygpgkey_sec.gpg --armor --export-secret-key 3AA5C34371567BD2

导入GPG密钥

1 将密钥放入用户目录下
2 导入GPG密钥

gpg --import ~/mygpgkey_pub.gpg
gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg