notes
2023 年 1 月 4 日
配置GPG签名,让你的Git提交不被冒充
当你发现自己的名下出现了一些未曾谋面的commits时,你就知道花几分钟配置一下GPG签名有多重要了
本文将重点讨论GPG密钥的生成以及其与Git&GitHub的集成,GPG命令行工具的安装不在本文的讨论范畴之内。
请注意,如果删除了先前有的GPG密钥,则凡使用了此签名的提交均会变灰,请自行斟酌!
@[toc]
写作本文的契机是因为一个月前我配置GPG密钥时读了GitHub的官方文章,结果简中部分不但语句不通,甚至翻译还很不全…虽然最后折腾好了(挺简单一事),但是考虑到日后可能自己也有参考的需要,而且看到了Spencer’s Blog上的这篇文章,便决定干脆写篇文章记录一下好了。
Step One. 生成一对密钥
在安装完GPG后,你可以使用命令
gpg --version
来检测GPG是否安装成功Tip: GPG的存储根目录为输出内容中的
Home
目录。
Windows环境可能会出现签名失败的bug,建议提前先记一下这个目录。
我们使用下面的命令来为我们自己生成一对GPG密钥(公钥+私钥)
gpg --full-generate-key
注意,上面的代码需要GPG版本为
2.1.17
或更高。
- 对于密钥种类,在此处输入
1
(为RSA and DSA
) - 对于密钥种类,GitHub要求的最短长度为
4096bits
,一般来讲选择这个即可(输入4096
) - 对于密钥有效时长,默认为永久有效,请根据实际情况选择
- 选择了有效期后,GPG会让你确认密钥会在多久后过期,若无误,在此时输入
y
表确认
- 选择了有效期后,GPG会让你确认密钥会在多久后过期,若无误,在此时输入
- 输入用户信息时,请确保输入了GitHub帐户上绑定了的==经过验证的==电子邮件地址
- “要将电子邮件地址保密,请使用GitHub提供的
no-reply
电子邮件地址。” - “建议使用GitHub账户的用户名”
comment
一项为密钥的注释,非必需
- “要将电子邮件地址保密,请使用GitHub提供的
- 最后一步,输入一个安全且你记得住的密码,回车,稍等片刻,等待命令行打印相关信息
若打印出了密钥的有关信息,则说明此时密钥已经生成成功啦,恭喜🎉
gpg: revocation certificate stored as 'C:\\Users\\xxxxxx\\AppData\\Roaming\\gnupg\\openpgp-revocs.d\\997AAxxxxxB2E8FxxxxxC38A9xxxxx5B217xxxxx.rev'
public and secret key created and signed.
pub rsa4096 2023-01-05 [SC] [expires: 2023-01-06]
997AAxxxxxB2E8FxxxxxC38A9xxxxxx5B217xxxxx
uid YanDao0313 <xxxxxxxxxx@qq.com>
sub rsa4096 2023-01-05 [E] [expires: 2023-01-06]
Step Two. 获取密钥信息
接下来,输入以下命令,它会让GPG列出我们当前拥有的全部
GPG Key
gpg --list-secret-keys --keyid-format=long
效果如下:
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 3 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 3u
gpg: next trustdb check due at 2023-01-06
C:\Users\xxxxxx\AppData\Roaming\gnupg\pubring.kbx
------------------------------------------------
sec rsa4096/9D34EF5B217774C7 2023-01-05 [SC] [expires: 2023-01-06]
997AAxxxxxB2E8FxxxxxC38A9xxxxxx5B217xxxxx
uid [ultimate] YanDao0313 <xxxxxxxxxx@qq.com>
ssb rsa4096/C4F16EA309D522FD 2023-01-05 [E] [expires: 2023-01-06]
在本例中,
sec
一行中的rsa4096/9D34EF5B217774C7
即为GPG私钥,后半段的9D34EF5B217774C7
为私钥IDStep Three. 把密钥告诉Git
在终端中输入如下命令,记得将
9D34EF5B217774C7
替换为你自己的私钥IDgit config --global user.signingkey 9D34EF5B217774C7
可选地,你可以全局强制使用GPG对提交签名,只需下面一行代码:
git config --global commit.gpgsign true
注意:在执行此命令后,每一次提交都需要输入密码进行签名,输一次密码即进入
sudo mode
,接下来的几分钟提交时不用再输密码。此时可以进行一次提交,看看签名生效了没,如果Git报错满天飞,那么可能是Git调用了与我们刚刚使用的不一致的GPG,可以输入以下的命令进行手动指定:
git config --global gpg.program /把目录替换成你的/114514/1919810/gpg
不要忘记替换成刚刚提到过的
home
目录哦(这逝homo目录罢(悲Step Four. 把密钥告诉GitHub
接下来,在终端中输入下面这一行命令,将
9D34EF5B217774C7
替换为你刚刚得到的私钥IDgpg --armor --export 9D34EF5B217774C7
若无误,它会打印出一串很长的GPG密钥,请复制以
-----BEGIN PGP PUBLIC KEY BLOCK-----
为开头并以-----END PGP PUBLIC KEY BLOCK-----
为结尾的密钥内容,请先暂时保存(但是不要以明文留存)注意,==包含==这两句哦~
将输出粘贴进入GitHub的Settings » SSH and GPG keys,选择可以拿去炫耀 即使账号被恶意使用也有证据来证明那不是你的行为了!
New GPG key
项,配置、验证并保存。之后,凡是正确签名了的commit都有一个漂亮的绿标Verified
字样,👨💻 本文到此结束,祝你不被冒充!
若无特殊说明,请勿转载我站原创文章。
作者: Yandao 发表日期:2023 年 1 月 4 日
理性发言,和谐讨论