GPG使用与介绍 & 并且应用到Git中实现签名提交Github

GPG(GNU Privacy Guard)是一种遵循OpenPGP标准的开源加密软件。我们可以用于加密内容,可以使用到文件、邮件等地方进行加密,例如加密了邮件后,除非有私钥不然谁也无法解密得知邮件中的内容。

在使用 git commit 时,项目要求使用GPG签名有以下作用:

  1. 防篡改
    签名确保提交内容未被篡改,从提交时到验证时内容保持一致。
  2. 不可否认性
    提交者无法否认自己的签名,因为签名与私钥绑定,私钥由提交者持有。
  3. 透明性
    所有协作者和审核者都可以验证提交来源,提高项目透明度。

Git 会使用在全局配置中的用户名和邮箱,如果其他人使用与你相同的用户名与邮箱,实际其他人无法真正分辨两者的提交是谁。面gpg密码中带有用户信息,且只有你拥有对应的密钥时才能解密信息,就能证明该提交的作者是你

git config --global user.name "Your Name"
git config --global user.email "youremail@yourdomain.com"

总结:
GPG 签名在 Git 中提供了身份验证、数据完整性和不可否认性,是保障代码来源可信的有力工具。

安装

可以选择自安装gpg程序,也可以使用Git自带的gpg程序。如何选择就看你是否想要自己管理gpg密钥。

如何选择看:

  • gpg4win:使用gpg4win可以用Gui界面方式操作,但需要自己安装和多一些配置步骤。
  • git:开发者自带且不用多一步配置,缺点是无界面

密钥换电脑时会有需要备份或修改密钥中用户信息,已经gpg密钥支持增加子密钥多台电脑中使用,深入使用带有Gui程序会减少心智负担。不想深入使用什么配置都不配就好。

安装方式一:Git Bash

直接安装Git, 使用时需要使用Git Bash。

安装方式二:Gpg4win

下载地址:Gpg4win - Get Gpg4win

安装时请选择Kleopatra, 我们将用kleopatra工具来管理Gpg密钥. 只安装gpg4win接下来的操作要用命令行了.

使用

创建GPG密钥

kleopatra方式

1

新建 OpenGPG 密钥对

2

填写内容

  • ①:输入名字与邮件地址
  • ②:使用密码句保护生成的密钥(每次使用密钥时需要输入密码,即使别人获取到密钥也得输入正确密码才能使用)
  • ③:Key Material 选择加密算法,(可选可不选,我使用rsa4096的算法)
  • ④:valid until取消勾选(因为自用为了方便我选择不加有效期)

3

输入保护密码(两次)

4

如密钥太过简单时会出现提示,可直接选择take this one anyway跳过(不要使用123456这样简单的密码)

5

创建成功

Git Bash方式

打开Git Bash终端输入:

gpg --full-generate-key

按提示步骤,选择用rsa加密算法长度4096位的密钥对(密钥自用方便可选择无有效期)

Git设置

步骤一:gpg程序位置(非使用Git Bash自带gpg程序时必须)

因git bash自带gpg加密程序,git提交时默认使用自己的gpg加密,我们需要修改成kleopatra附带的程序。

# 当使用gpg4win时需此配置,使用git内置的gpg生成时不需要
git config --global gpg.program <YOUR_GPG_PROGRAM>

# 例:git config --global gpg.program "C:\\Program Files (x86)\\GnuPG\\bin\\gpg.exe"

gpg程序路径在默认安装时,可以在文件管理中看kleopatra的同级目录

步骤二:自动使用gpg加签

git config --global commit.gpgsign true
git config --global tag.gpgsign true

PS这一步可选,但提交前commit命令添加参数(-s)

git commit -s -m "_commit_message_"

步骤三:添加你的Gpg Key ID

git config --global user.signingkey <YOUR_GPG_KEY_ID>

不知如何获取Key ID时看

kleopatra 获取GPG_KEY_ID

命令行 获取GPG_KEY_ID

输入命令打印

gpg --list-secret-keys --keyid-format=long

GitCode GPG公钥设置

复制出来的公钥末尾可能带有回车,需要删掉不然校验提示保存不了,密钥本身无错

Github GPG公钥设置

效果

Git提交记录会显示加签标记

Github提交记录显示

其他

Git提交记录验证其他提交者

  1. 需要项目成员提供他的gpg公钥并导入(导入方式见:导入他人gpg公钥到kleopatra)

拥有他人公钥后验证将变为绿标。

查看绿标显示签名用户和邮箱

导入他人gpg公钥到kleopatra

  1. 需要他人提供gpg公钥并导入

  1. 认证

  1. 选择自己的认证方式