用 GPG 签名 GitHub的Commit
2020年11月6日...大约 3 分钟
摘自维基百科
GNU Privacy Guard(GnuPG或GPG)是一个密码学软件,用于加密、签名通信内容及管理非对称密码学的密钥。GnuPG是自由软件,遵循IETF订定的OpenPGP技术标准设计,并与PGP保持兼容。
如果用 GitHub 客户端或者在 GitHub 网页上操作 git 都会在 commits 中留下 Verified
的标记, 这表示该 commit 是在 GitHub 上创建的,使用 GitHub 的 key 对这个提交进行了签名。 但 GitHub 客户端或者 GitHub 网页并不是签名 commit 的唯一方法,我们也可以通过 GnuPG (GPG) 来签名我们的 commit。
1. 安装GPG
Linux 一般都是自带GPG,可以直接使用
如果没有可使用如下命令:
# Debian、Ubuntu 等
apt-get install gnupg
# Redhat、Centos、Fedora 等
yum install gnupg
Windows 中MinGW带有GPG,而 Windows 版的 Git 基于 MinGW 的,所以直接使用git bash就行
2. 生成GPG密钥
git bash中使用命令:gpg --gen-key
$ gpg --gen-key
gpg (GnuPG) 2.2.15; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
注意:使用 “gpg --full-generate-key” 以获得一个功能完整的密钥产生对话框。
GnuPG 需要构建用户标识以辨认您的密钥。
真实姓名: name
电子邮件地址: name@qq.com
然后输入 O
确定
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
然后会提示你
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘、移动鼠标、读写硬盘之类的)将会是一个不错的主意;
这会让随机数发生器有更好的机会获得足够的熵
之后会弹出对话框让你输入密码 密钥生成完成之后,记下密钥 ID 43948FGB5418156F
gpg: 密钥 43948FGB5418156F 被标记为绝对信任
gpg: 吊销证书已被存储为‘/home/name/.gnupg/openpgp-revocs.d/DC4E79EFEE5E224A20E9013A43948FGB5418156F.rev’
公钥和私钥已经生成并被签名。
pub rsa2048 2020-11-6 [SC] [有效至:2022-11-6]
DC4E79EFEE5E224A20E9013A43948FGB5418156F
uid name <name@qq.com>
sub rsa2048 2020-11-6 [E] [有效至:2022-11-6]
3. Git设置
提示
想全局设置,在命令中加上 --global
参数
让 Git 使用我们的密钥来对 commit 进行签名
git config user.signingkey <密钥ID>
设置 Git 使用该密钥加密 commit
git config commit.gpgsign true
顺便设置 Git 全局使用该密钥加密 tag
git config tag.forcesignannotated true
4. 获得公钥
公钥文件是以二进制的形式储存的,我们使用 --armor
参数将它转换成 ASCII 码的形式输出
gpg --armor --export <密钥ID>
复制输出的公钥
5. 上传公钥到GitHub
在 GitHub 的设置页面的 SSH and GPG keys,点击 New GPG key添加就行
以后你在这台计算机推送到 GitHub 的 commit 就都带有 GPG 签名了
6. 额外的命令补充
- 列出密钥:
gpg --list-keys
- 删除私钥:
gpg --delete-secret-keys <密钥ID>
- 删除公钥:
gpg --delete-keys <密钥ID>
Powered by Waline v3.3.2