GPG 你又了解多少呢?

2023年 8月 9日 41.6k 0

bg2013071202.png

前提

今日愉快地Coding,当写完后进行commit,发现出错了,报错如下:

image.png

在网上查了一轮资料后,有很多奇奇怪怪的答案。最后锁定了,其实是我的GPG KEY 过期了。这篇文章想从零开始了解GPG以及Git的GPG配置

什么是GPG

以下是引用阮一峰的GPG入门教程:

1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。

GPG是一种PGP标准的实现。可以使用其公钥和私钥对数据进行加密、解密、签名操作。

GPG的使用

GPG的安装

GPG的安装可以参考官网提供的方式,下载对应的包文件进行安装

image.png

生成GPG KEY

安装成功后,使用gen-ken参数生成自己的密钥。

gpg --gen-key

如下图所示,其中红色部分为KEY ID
image.png

使用GPG 加密

gpg --recipient [KEY ID] --output demo.en.txt --encrypt demo.txt

GPG 你又了解多少呢?-1

使用GPG 解密

gpg --decrypt --output [解密后的文件] [加密的文件]

image.png

其余GPG指令

还有其余GPG指令,这里就不一一介绍了

  • gpg --list-key (列出所有key)
  • gpg --delete-key [KEY ID] (删除KEY)
  • gpg --armor --output public-key.txt --export [KEY ID] (输出公钥)
  • gpg --armor --output private-key.txt --export [KEY ID] (输出私钥,私钥请妥善保管)
  • gpg --sign [文件] (会在同目录下生成一个[文件].gpg的二进制签名文件)
  • gpg ---clearsign [文件] (会在同目录下生成一个[文件].gpg的ASCII签名文件)
  • gpg --detach-sign [文件] (会在同目录生成一个单独的[文件].sig 二进制签名文件,与文件内容分开存放)
  • gpg --armor --detach-sign [文件] (会在同目录生成一个单独的[文件].sig ASCII签名文件,与文件内容分开存放)
  • gpg --verify [单独的签名文件] [数据文件] 如下:
gpg --verify test.txt.sig test.txt
响应结果如下:
gpg: Signature made Sat Jul 29 15:38:34 2023
gpg:                using RSA key E4C50A2B0A2C0AA               5E8400386FB582F24A67B8336
gpg: Good signature from "ymbcxb" [ultimate]
  • gpg --local-user [发送者的KEY ID] --recipient [接收者(公钥) KEY ID] --armor --sign --encrypt demo.txt (如 A发送B,A用A的私钥签名,用B的公钥进行加密;B接受到信息后用A的公钥进行验签,用B的私钥进行解密)
  • gpg --edit-key [KEY ID] (编辑KEY信息,进入GPG控制台,在控制台输入expire控制控制KEY的过期时间)

GPG在Git上的应用

GPG在Git上主要是使用其签名功能,防止他人伪造篡改自己的commit info。
有时候我们可以在GitHub上看到以下情形(这里找的Mybatis的commit信息):
会有一个Verified的绿色Logo,这就如同HTTPS的绿色小锁一样亮眼。

image.png

如果没有使用GPG,你的commit信息是可以被人篡改的

git commit --amend --author="fake " --no-edit
git push --force

image.png

GPG在GitHub上的使用

在Github的Settings的SSH-GPG Keys 可以New 一个GPG KEY
使用上面的指令,输出公钥,将公钥拷贝到Github上

gpg --armor --export [KEY ID] (输出公钥)

git上绑定GPG KEY

git config --global user.signingkey {key_id}

设置自动签名

git config --global commit.gpgsign true

总结

原本是从GPG KEY的过期的现象到摸索了解GPG,学习了GPG的相关操作。
其实关于Git上的GPG KEY也不用过分注重,其实很多开源项目也并非都是有做GPG 签名的,
就算在企业中,篡改他人信息在Git Reviewer中也是会被发现的。
但是多一个绿色小锁,谁又不爱呢?
本篇到此结束

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论