配置GPG签名,让你的Git提交不被冒充
当你发现自己的名下出现了一些未曾谋面的commits时,你就知道花几分钟配置一下GPG签名有多重要了
本文将重点讨论GPG密钥的生成以及其与Git&GitHub的集成,GPG命令行工具的安装不在本文的讨论范畴之内。
请注意,如果删除了先前有的GPG密钥,则凡使用了此签名的提交均会变灰,请自行斟酌。
写作本文的契机是因为一个月前我配置GPG密钥时读了GitHub的官方文章,结果简中部分不但语句不通,甚至翻译还很不全......虽然最后折腾好了(挺简单一事),但是考虑到日后可能自己也有参考的需要,而且看到了Spencer's Blog上的这篇文章,便决定干脆写篇文章记录一下好了。
Step One. 生成一对密钥
在安装完GPG后,你可以使用命令gpg --version
来检测GPG是否安装成功
Tip: GPG的存储根目录为输出内容中的Home
目录。
Windows环境可能会出现签名失败的bug,建议提前先记一下这个目录。
我们使用下面的命令来为我们自己生成一对GPG密钥(公钥+私钥)
注意,上面的代码需要GPG版本为2.1.17
或更高。
- 对于密钥种类,在此处输入1
(为`RSA and DSA`)
- 对于密钥长度,GitHub要求的最短长度为`4096bits`,一般来讲选择这个即可(输入4096
)
- 对于密钥有效时长,默认为永久有效,请根据实际情况选择
- 选择了有效期后,GPG会让你确认密钥会在多久后过期,若无误,在此时输入y
表确认
- 输入用户信息时,请确保输入了GitHub帐户上绑定了的经过验证的电子邮件地址
- “要将电子邮件地址保密,请使用GitHub提供的no-reply
电子邮件地址。”
- 建议使用 GitHub账户的用户名-comment
一项为密钥的注释,非必需
- 最后一步,输入一个安全且你记得住的密码,回车,稍等片刻,等待命令行打印相关信息
若打印出了密钥的有关信息,则说明此时密钥已经生成成功啦,恭喜🎉
Step Two. 获取私钥信息
接下来,输入以下命令,它会让GPG列出我们当前拥有的全部 GPG Key
效果如下:
在本例中, sec
一行中的 rsa4096/9D34EF5B217774C7
即为GPG私钥,后半段的 9D34EF5B217774C7
为私钥ID
Step Three. 把密钥告诉Git
在终端中输入如下命令,记得将 9D34EF5B217774C7
替换为你自己的私钥ID
可选地,你可以全局强制使用GPG对提交签名,只需下面一行代码:
注意:在执行此命令后,每一次提交都需要输入密码进行签名,输一次密码即进入 sudo mode
,接下来的几分钟提交时不用再输密码。
此时可以进行一次提交,看看签名生效了没,如果Git报错满天飞,那么可能是Git调用了与我们刚刚使用的不一致的GPG,可以输入以下的命令进行手动指定:
不要忘记替换成刚刚提到过的 home
目录(这逝homo目录罢(悲
Step Four. 把密钥告诉GitHub
接下来,在终端中输入下面这一行命令,将 9D34EF5B217774C7
替换为你刚刚得到的私钥ID
若无误,它会打印出一串很长的GPG密钥,请复制以 -----BEGIN PGP PUBLIC KEY BLOCK-----
为开头并以 -----END PGP PUBLIC KEY BLOCK-----
为结尾的密钥内容,请先暂时保存(但是不要以明文留存)
注意,包含这两句
将输出粘贴进入GitHub的Settings » SSH and GPG keys,选择 New GPG key
项,配置、验证并保存。之后,凡是正确签名了的commit都有一个漂亮的绿标 Verified
字样,可以拿去炫耀 即使账号被恶意盗用也有证据来证明那不是你的行为了。