在macOS上使用GPG对GitHub进行签名

在GitHub上面我们对自己提交的commit进行签名,通过签名之后GitHub就会知道这个commit是经过签名的、可信的commit,并且会有个绿色的“Verified”显示在旁边。
github pgp

安装PGP

这里通过homebrew进行安装,没有的话可以通过官网https://brew.sh/ 先安装homebrew。

1
brew install gpg

安装完成后可以通过gpg --version查看当前安装的GPG版本号。

生成GPG秘钥

GPG版本为2.1.17或者更高

1
gpg --full-generate-key

GPG版本低于2.1.17

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

生成密钥时的参数

加密方式选择默认的:RSA and DSA

秘钥长度:4096

秘钥有效时间可以根据自己的喜好进行选择。

在输入用户信息的时候需要输入经过GitHub认证过的邮箱,可以通过连接 https://github.com/settings/emails 查看。

接下来就是要输入验证的密码,这里可能会是乱码,但是不影响输入,这里一共需要输入两次密码。

查看生成的秘钥

通过命令查看GPG秘钥的ID

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

输出如下:

1
2
3
4
5
6
$ 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

这里的3AA5C34371567BD2就是我们需要的秘钥ID,接下来运行下面的命令,将其中的秘钥ID替换为自己的ID

1
gpg --armor --export 3AA5C34371567BD2

得到从 -----BEGIN PGP PUBLIC KEY BLOCK----- 开始到 -----END PGP PUBLIC KEY BLOCK----- 结束的公钥。

添加GPG公钥至GitHub

打开GitHub的设置页面:https://github.com/settings/keys

点击 New GPG key,把刚刚得到的公钥粘贴进去。

github gpg keys

设置git使用GPG秘钥

运行命令,需要替换为自己的秘钥ID:

1
git config --global user.signingkey 3AA5C34371567BD2

如果只需要对当前仓库使用GPG秘钥:

1
git config commit.gpgsign true

如果需要对所有仓库使用GPG秘钥:

1
git config --global commit.gpgsign true

提交报错

这个时候如果进行commit,会遇到一下的错误:

1
2
error: gpg failed to sign the data 
fatal: failed to write commit object

经过查询,需要安装 pinentry-mac:

1
brew install pinentry-mac

然后在文件~/.gnupg/gpg-agent.conf中加入

1
pinentry-program /usr/local/bin/pinentry-mac

最后重启pinentry才能生效:

1
gpg-connect-agent reloadagent

这个时候再次进行commit,就可以正常输入密码提交了。

参考文献


在macOS上使用GPG对GitHub进行签名
https://slw.im/2020/09/submit-to-github-with-gpg-on-mac/
作者
Ryo Shen
发布于
2020年9月9日
许可协议