GPG 你又了解多少呢?

前提

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

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

什么是GPG

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

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

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

GPG的使用

GPG的安装

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

生成GPG KEY

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

css 复制代码
gpg --gen-key

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

使用GPG 加密

css 复制代码
gpg --recipient [KEY ID] --output demo.en.txt --encrypt demo.txt

使用GPG 解密

css 复制代码
gpg --decrypt --output [解密后的文件] [加密的文件]

其余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 [单独的签名文件] [数据文件] 如下:
vbnet 复制代码
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的绿色小锁一样亮眼。

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

css 复制代码
git commit --amend --author="fake <fake.com>" --no-edit
git push --force

GPG在GitHub上的使用

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

scss 复制代码
gpg --armor --export [KEY ID] (输出公钥)

git上绑定GPG KEY

lua 复制代码
git config --global user.signingkey {key_id}

设置自动签名

arduino 复制代码
git config --global commit.gpgsign true

总结

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

相关推荐
求知摆渡1 小时前
共享代码不是共享风险——公共库解耦的三种进化路径
java·后端·架构
brzhang1 小时前
前端死在了 Python 朋友的嘴里?他用 Python 写了个交互式数据看板,着实秀了我一把,没碰一行 JavaScript
前端·后端·架构
该用户已不存在2 小时前
不知道这些工具,难怪的你的Python开发那么慢丨Python 开发必备的6大工具
前端·后端·python
Xy9102 小时前
开发者视角:App Trace 一键拉起(Deep Linking)技术详解
java·前端·后端
嘻嘻哈哈开森2 小时前
技术分享:深入了解 PlantUML
后端·面试·架构
vvw&2 小时前
Linux 中的 .bashrc 是什么?配置详解
linux·运维·服务器·chrome·后端·ubuntu·centos
厚道2 小时前
Elasticsearch 的存储原理
后端·elasticsearch
不甘打工的程序猿2 小时前
nacos-client模块学习《心跳维持》
后端·架构
方块海绵2 小时前
mysql 中使用 json 类型的字段
后端