Git的GPG的用法
本文主要介绍gpg key的生成和用法
一.概述
ssh用于身份鉴权,可push代码。
但是git的commit里,可以随意git config user.email
,所以任何人都可以设置提交的邮箱,这里存在篡改的可能,github也确实出现过这类问题。
所以引入了gpg key,用于对commit进行签名。
如果你用了gpg key对commit进行签名,那么repor的提交记录里,你的信息会有个“已认证”"Verified"的样式,如下:
你可能需要先安装gpg
,mac通过Homebrew,再安装gpg
:
1 | brew install gpg |
二.核心用法
核心需要设置user.email,需要和你的gpg key一致,然后设置你的仓库使用gpg并关联上你的gpg key,最后在commit的时候,进行关联:
#核心需要设置user.email
git config user.name 'Thomas'
git config user.email 'thomas@gmail.com'
#开启gpg 签名
git config commit.gpgsign true
#关联你的key的id,id的生成参见下面的段落
git config user.signingkey 26CBB52DA8524384
#commit时,添加-S指令用于签名
git commit -S -m "first commit"
三.生成
gpg --full-generate-key
你会看到如下字样:
1 | Please select what kind of key you want: |
输入1并回车,你会看到:
1 | RSA keys may be between 1024 and 4096 bits long. |
你最好输入4096,最长的密钥
1 | Requested keysize is 4096 bits |
会提示你选择过期范围,建议你选择一个有效期,然后会问你以上信息是否正确,如下:
1 | Key does not expire at all |
输入y,然后接下来会让你输入姓名等信息,这些不重要,但是邮箱很重要,这里的邮箱需要和你设置的git config user.email thomas@gmail.com
完全一直
1 | Real name: thomas |
最后输入O,代表OK。
然后会要求输入这个key的密码,根据操作系统不同,可能会弹窗要求你输入key的密码,输入完成之后,会给你看结果,大致如下:
1 | pub rsa4096 2020-02-06 [SC] |
注意,不要生成phrase,否则后续使用会有些麻烦。
如果一定要生成phrase,需要添加环境变量,否则在某些情况下,不会提示你输入密码,会直接报错:
1 | export GPG_TTY=$(tty) |
这里没有展示key的id,你需要继续输入:
gpg --list-secret-keys --keyid-format LONG
你会得到类似下面的东西
1 | sec rsa4096/26CBB52DA8524384 2020-02-06 [SC] |
这里的26CBB52DA8524384
就是你的gpg key的id,非常重要,下面要根据这个id导出key的公钥:
1 | gpg --armor --export 26CBB52DA8524384 |
将导出的公钥录入到github上。
然后再参照第二段里的核心用法进行使用即可
四.导入导出
4.1.查看密钥
1 | gpg --list-secret-keys --keyid-format LONG |
输出如下:
1 | sec rsa4096/26CBB52DA8524384 2020-02-06 [SC] |
这一次,用如CE9ECA454E8243E95C7D96FF26CBB52DA8524384作为Keyid
4.2.导出
导出公钥:
1 | #输出到控制台 |
导出私钥:
1 | gpg -a -o private-file.key --export-secret-keys CE9ECA454E8243E95C7D96FF26CBB52DA8524384 |
4.3.导入
将公钥和私钥直接import即可
1 | gpg --import public-file.key |
4.4.删除
1 | gpg --delete-secret-key 26CBB52DA8524384 |