GPG Verification¶
回顾一下cs161学过的内容,当我们用ssh远程连接机器时,需要进行密钥认证,此处维护的是“主机与服务器之间的会话”。
在现实的开发中,我们也需要进行密钥认证。比如,当我们提交commit时,如何向服务器证明我们的身份?如果没有身份认证,主机可能会以为是malicious attackers在进行攻击。
因此,我们需要一个signature,来证明我们的身份,很显然这里需要维护的是“本次commit”。
Why GPG¶
GPG(GNU Privacy Guard)密钥认证,允许你对Git提交和标签进行签名,这样其他人可以确认这些更改确实来自可信的源。当提交被GPG密钥签名后,在GitHub上会显示"Verified"(已验证)标记。
工作原理:
- 使用者需要生成一对GPG密钥:
- 私钥:保密使用,用于签名
- 公钥:上传到GitHub,用于验证
- 签名验证过程:
- 你用私钥对提交进行签名
- GitHub使用你上传的公钥验证签名
- 如果验证成功,提交会被标记为"Verified"
Demonstration¶
每次commit跟着的Unverified
,是因为我们没有进行GPG签名; 而Verified
,是因为我们进行了GPG签名。
How to use GPG¶
Install GPG¶
在配置之前,请先确保本地安装了 GPG。
对于 macOS,可以使用 brew install gnupg
进行安装。
Generate GPG¶
在本地生成一个 GPG 密钥,以下是简单步骤(以 Mac 和 Linux 为例):
Bash | |
---|---|
1 |
|
选择类型(推荐默认的 RSA 和 RSA),设置密钥长度为 4096,指定有效期和填写姓名、邮箱等信息
Get GPG ID¶
生成密钥后,列出 GPG 密钥,找到其中的 ID:
Bash | |
---|---|
1 |
|
在输出中找到类似 sec rsa4096/XXXXXXXX
的一行,将其中的 XXXXXXXX
记下,这就是 GPG 密钥 ID。
Send PubKey to Github¶
将 GPG 公钥添加到 GitHub:
Operation Path: homepage -> settings -> SSH and GPG keys -> New GPG key
- 打开 GitHub,进入 Settings。
- 在 SSH and GPG keys 中选择 New GPG key。
- 将之前导出的公钥粘贴到文本框中,点击 Add GPG key。
GPG Configure in Local Machine¶
在本地机器上配置 Git 使用 GPG 签名(我推荐全局启用):
Bash | |
---|---|
1 2 |
|
这样每次 commit 都会默认使用 GPG 签名。