什么是GPG
一句话解释:一个用来对数据加密和签名的工具。
来自GPG官网:https://gnupg.org/
Short for GNU Privacy Guard and also abbreviated as GnuPG. GnuPG is a complete and free implementation of the OpenPGP standard as defined by RFC4880 (also known as PGP). GnuPG allows you to encrypt and sign your data and communications; it features a versatile key management system, along with access modules for all kinds of public key directories. GnuPG, also known as GPG, is a command line tool with features for easy integration with other applications. A wealth of frontend applications and libraries are available. GnuPG also provides support for S/MIME and Secure Shell (ssh).
GNU Privacy Guard的缩写,也缩写为GnuPG。GnuPG是由RFC4880(也称为PGP)定义的OpenPGP标准的一个完整且免费的实现。GnuPG允许您对数据和通信进行加密和签名;它具有一个通用的密钥管理系统,以及用于各种公钥目录的访问模块。GnuPG,也称为GPG,是一个命令行工具,具有易于与其他应用程序集成的特性。有大量的前端应用程序和库可用。GnuPG还提供了对S/MIME和安全Shell (ssh)的支持。
我们拿GPG做什么?
在这里我们主要是使用GPG来为git提交信息和标签做签名,这样能在github、gitee、gitlab上明确地显示是认证过的提交。
由于git配置的邮箱和用户名是可以随便修改的,所以其他人实际上是可以通过配置成你的邮箱和用户,然后冒充你的身份,去提交和修改代码,这样别人就不知道代码改动到底是不是真的来自于你。而如果你能对你们的每次提交行为都用GPG做签名(签名就是打上你独特的指纹的意思),而把这个GPG的公钥配置在你github的账号,那么你的提交就可以被github验证,验证通过就会显示一个绿色的Verified的标志,他人就能百分百确信这是你这个github用户做的提交了,也让其他人无法冒充你了。
Git如何配置GPG签名
官方教程
同时在github和gitee都有教程,参考:
Github GPG生成和配置教程
Gitee GPG生成和配置教程
其中在github的教程中会让你使用gpg的命令行程序,而gitee的教程会让你使用https://gpgtools.org/这个里面的gpg客户端程序。看你自己的喜好。
查看秘钥
$ gpg --list-secret-keys --keyid-format=long
导入和导出公钥私钥
参考:
How to export and import keys with GPG
导出公钥
—export后面那串就是秘钥的ID,是你列出秘钥时,接在sec 4096R/后面的那串字符。
$ gpg --armor --export E234A3D9KLJFLKF724 [22/01/20|11:55:23]
-----BEGIN PGP PUBLIC KEY BLOCK-----
一大串公钥内容
-----END PGP PUBLIC KEY BLOCK-----
导出私钥
$ gpg --export-secret-key -a 用户名/秘钥ID > private.key
如果是填的用户名,则会将用户名下的所有秘钥的私钥都导出;如果是填的秘钥ID,则会将对应秘钥ID的私钥导出。
导入则参考上述发的参考连接。
同账号多秘钥
—recipient可以用来指定你的操作所使用的的秘钥的ID,例如:
gpg --encrypt --recipient A4FF2279
$ gpg --help
Options to specify keys:
-r, --recipient USER-ID encrypt for USER-ID
配置git全局gpg签名
❯ cat .gitconfig
[user]
name = HWilliamGo
email = williamintoandroid@outlook.com
signingkey = 秘钥ID
[gpg]
program = /usr/local/bin/gpg
告诉git你用于签名的秘钥ID
告诉git你的gpg程序的位置
配置mac电脑下GUI程序的GPG签名
IDEA Sign commits with GPG keys
https://github.com/pstadler/keybase-gpg-github
安装pinentry-mac程序
$ brew install pinentry-mac
~/.gnupg
❯ cat gpg.conf [22/01/20|22:00:56]
use-agent
no-tty
~/.gnupg
❯ cat gpg-agent.conf [22/01/20|22:01:01]
pinentry-program /usr/local/bin/pinentry-mac
~/.gnupg