配置GPG签名,让你的Git提交不被冒充
notes, tech

配置GPG签名,让你的Git提交不被冒充

当你发现自己的名下出现了一些未曾谋面的commits时,你就知道花几分钟配置一下GPG签名有多重要了

926次点击5分钟阅读

本文将重点讨论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 字样,可以拿去炫耀 即使账号被恶意盗用也有证据来证明那不是你的行为了。

相关文章