这篇指南面向的是对 GPG
有了一定了解的的朋友,如果你还不知道 GPG
是什么,那么可能需要先补充一下这部分的基础知识,再来食用比较合适。
如果你已经大概了解 GPG
的一些内容,知道它能用来干什么而且你真的需要用到。那么这篇指南或许对你有一点的帮助。
这篇指南主要针对于 macOS
系统下的 GPG
使用方法,如果你使用的是 Windows
或者 Linux
,其中有些内容可能并不适用。
文中使用的 GPG
版本是 2.4.5
版本信息如下。
备注: 下文中所有的展示内容的部分 $
开头的行表示的当前 shell
环境的命令输入行。命令均不包含 $
本身。
$ gpg --version gpg (GnuPG) 2.4.5 libgcrypt 1.10.3 Copyright (C) 2024 g10 Code GmbH License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: /Users/zebedy/.gnupg 支持的算法: 公钥: RSA, ELG, DSA, ECDH, ECDSA, EDDSA 密文: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 散列: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 压缩: 不压缩, ZIP, ZLIB, BZIP2
初次使用 如果你还没有任何密钥,想新生成一个使用。建议从这里开始。
生成主密钥 一般的情况下,我们使用 --gen-key
就可以快速的生成一个密钥对,但是这个是一个简便方法。
这里我们需要更多的细节设置,所以用 --full-gen-key
来代替
$ gpg --full-gen-key gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 请选择您要使用的密钥类型: (1) RSA 和 RSA (2) DSA 和 Elgamal (3) DSA(仅用于签名) (4) RSA(仅用于签名) (9) ECC(签名和加密) *默认* (10) ECC(仅用于签名) (14)卡中现有密钥 您的选择是? 9
在该版本(2.4.5
)下可以通过 *默认*
可以看默认的密钥类型为 ECC(签名和加密)
这里我们不需要任何修改。使用默认即可。
在当前界面输入选项前面括号中的数字 9
之后回车确认,或者不输入任何内容直接回车确认即可。
请选择您想要使用的椭圆曲线: (1) Curve 25519 *默认* (4) NIST P-384 (6) Brainpool P-256 您的选择是? 1
类似上一步,选择使用的椭圆曲线,这里选择默认 Curve 25519
即可。
在当前界面输入 1
之后回车确认,或者不输入任何内容直接回车确认即可。
请设定这个密钥的有效期限。 0 = 密钥永不过期 <n> = 密钥在 n 天后过期 <n>w = 密钥在 n 周后过期 <n>m = 密钥在 n 月后过期 <n>y = 密钥在 n 年后过期 密钥的有效期限是?(0) 0
然后这里需要选择密钥的有效期。
如果是个人使用,可以选择永不过期,这样可以避免以后过期后还需要再次创建一个新的密钥。
而如果需要配置特定的过期时间。则根据下面的三个选项输入对应的内容即可,比如需要在一周后过期,则输入 1w
3 个月后过期 3m
我这里就选了 0
表示永不过期。输入数字 0
回车后经过二次确认。
GnuPG 需要构建用户标识以辨认您的密钥。 真实姓名:
从这里开始后面的步骤就是输入密钥对应的个人信息了。
依次输入内容包括 真实姓名
, 电子邮件地址
, 注释
其中注释可以省略。
GnuPG 需要构建用户标识以辨认您的密钥。 真实姓名: zebedy 电子邮件地址: zebedy@example.com 注释: 您选定了此用户标识: “zebedy <zebedy@example.com>” 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?
这里如果确认个人信息输入没问题,就可以输入字母 O
回车确认。
确定之后根据提示设置主密钥的密码。确定密码后。经过短暂的时间就可以生成一个密钥了。
这个密码一定要妥善保管,会经常需要使用。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘 、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数 发生器有更好的机会获得足够的熵。 我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘 、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数 发生器有更好的机会获得足够的熵。 gpg: 吊销证书已被存储为‘/Users/zebedy/.gnupg/openpgp-revocs.d/A31F6E522B93990CA1A1C548D188A1DD832AB894.rev’ 公钥和私钥已经生成并被签名。 pub ed25519 2024-03-24 [SC] A31F6E522B93990CA1A1C548D188A1DD832AB894 uid zebedy <zebedy@example.com> sub cv25519 2024-03-24 [E]
到这里,主密钥就生成结束了。
生成子密钥 替换默认 pinentry
在生成子密钥之前,首先需要做一个事情:替换默认的 pinentry
pinentry
是用来合用乎交互输入密码的,因为默认的 pinentry
依赖 GPG_TTY
所以可以再终端中实现输入密码。但是如果我们在其他的地方,比如 VSCode 或者 JB 全家桶的时候,就会出现因为无法输入密码导致失败。
所以我们需要安装第三方的 pinentry-mac
,并替换默认 pinentry
$ brew install pinentry-mac $ echo "pinentry-program $(which pinentry-mac) " >> ~/.gnupg/gpg-agent.conf
然后重启 gpg-agent
即可
$ echo RELOADAGENT | gpg-connect-agent
创建用于 SSH 鉴权的子密钥 创建子密钥 首先我们查看一下主密钥的相关信息
$ gpg --list-keys --keyid-format=long gpg: 正在检查信任度数据库 gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: 深度:0 有效性: 4 已签名: 0 信任度:0-,0q,0n,0m,0f,4u [keyboxd] --------- pub ed25519/D188A1DD832AB894 2024-03-24 [SC] A31F6E522B93990CA1A1C548D188A1DD832AB894 uid [ 绝对 ] zebedy <zebedy@example.com> sub cv25519/2978529F4782B600 2024-03-24 [E]
第一行 开头的 pub
表示这个是公钥, ed25519
是上面创建密钥时选择的椭圆曲线方法, 后面的 D188A1DD832AB894
是公钥的16位短摘要, 2024-03-24
是生成时间, [SC]
中 S:signing
表示可以用于签名 C:certification
表示可以用于认证。
第二行 A31F6E522B93990CA1A1C548D188A1DD832AB894
是密钥的40位长摘要。其中上面的短摘要就是长摘要的后16位。
第三行 uid
是用户信息,[ 绝对 ]
表示该密钥的信任等级是最高级别: 绝对信任。后面分别是输入的名字,注释和电子邮件
第四行 sub
表示这个是子公钥,是创建主密钥的时候自动生成的一个子密钥,最后的[E]
中 E:encryption
表示可用于加密
当然我们也可以通过 --list-secret-keys
查看私钥
$ gpg --list-secret-keys --keyid-format=long [keyboxd] --------- [keyboxd] --------- sec ed25519/D188A1DD832AB894 2024-03-24 [SC] A31F6E522B93990CA1A1C548D188A1DD832AB894 uid [ 绝对 ] zebedy <zebedy@example.com> ssb cv25519/2978529F4782B600 2024-03-24 [E]
内容和上面只有前面的 pub
-> sec
(表示私钥),sub
-> ssb
(表示子私钥) 不一样,其他的内容都一样。
通过上面知道主密钥的摘要是 D188A1DD832AB894
(这里用长短摘要都可以。但是为了方便,后面就都用短摘要。也可以直接使用 uid
中的姓名)
接下来就需要用这个主密钥生成一个子密钥。因为需要用到高级自定义,所以需要加上 --expert
$ gpg --expert --edit-key D188A1DD832AB894 gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 私钥可用。 sec ed25519/D188A1DD832AB894 创建于:2024-03-24 有效至:永不 可用于:SC 信任度:绝对 有效性:绝对 ssb cv25519/2978529F4782B600 创建于:2024-03-24 有效至:永不 可用于:E [ 绝对 ] (1). zebedy <zebedy@example.com> gpg>
可以看到这里 shell
变成了 gpg>
表示进入了与 GPG
的交互
输入 addkey
添加一个新的子密钥
gpg> addkey 请选择您要使用的密钥类型: (3) DSA(仅用于签名) (4) RSA(仅用于签名) (5) ElGamal(仅用于加密) (6) RSA(仅用于加密) (7) DSA(自定义用途) (8) RSA(自定义用途) (10) ECC(仅用于签名) (11) ECC(自定义用途) (12) ECC(仅用于加密) (13) 现有密钥 (14)卡中现有密钥 您的选择是? 8
输入 8
回车确认,使用 RSA(自定义用途)
选项手动配置这个密钥。
RSA 密钥的可实现的功能: 签名(Sign) 加密(Encrypt) 身份验证(Authenticate) 目前启用的功能: 签名(Sign) 加密(Encrypt) (S) 签名功能开关 (E) 加密功能开关 (A) 身份验证功能开关 (Q) 已完成 您的选择是? S
这里可以看到这个子密钥目前启用的功能有 签名(Sign)
和 加密(Encrypt)
但是 SSH
鉴权不需要这两个功能,所以我们先要取消这两个功能。
输入 S
回车后取消 签名(Sign)
的功能
RSA 密钥的可实现的功能: 签名(Sign) 加密(Encrypt) 身份验证(Authenticate) 目前启用的功能: 加密(Encrypt) (S) 签名功能开关 (E) 加密功能开关 (A) 身份验证功能开关 (Q) 已完成 您的选择是? E
现在子密钥目前启用的功能就只有 加密(Encrypt)
了,再次输入 E
回车。
RSA 密钥的可实现的功能: 签名(Sign) 加密(Encrypt) 身份验证(Authenticate) 目前启用的功能: (S) 签名功能开关 (E) 加密功能开关 (A) 身份验证功能开关 (Q) 已完成 您的选择是? A
现在已启用功能就没有了任何内容,输入 A
回车后开启 SSH
鉴权需要的功能。
RSA 密钥的可实现的功能: 签名(Sign) 加密(Encrypt) 身份验证(Authenticate) 目前启用的功能: 身份验证(Authenticate) (S) 签名功能开关 (E) 加密功能开关 (A) 身份验证功能开关 (Q) 已完成 您的选择是? Q
然后输入 Q
结束自定义功能,进入 RSA
密钥选项。
因为添加子密钥的时候选择的是 RSA
密钥,所以这里需要指定密钥长度。长度越长,安全性越高。我这里就选择 4096
RSA 密钥的长度应在 1024 位与 4096 位之间。 您想要使用的密钥长度?(3072) 4096
然后设置子密钥的有效期。因为也是个人长期使用,所以选择 0 密钥永不过期
请设定这个密钥的有效期限。 0 = 密钥永不过期 <n> = 密钥在 n 天后过期 <n>w = 密钥在 n 周后过期 <n>m = 密钥在 n 月后过期 <n>y = 密钥在 n 年后过期 密钥的有效期限是?(0) 0
然后经过两次输入 y
的确认后,会提示输入主密钥的密码。因为创建子密钥需要用到主密钥的私钥,所以需要用到主密钥的密码。
输入完正确密码后,经过短暂时间就生成了一个 RSA
密钥。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘 、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数 发生器有更好的机会获得足够的熵。 sec ed25519/D188A1DD832AB894 创建于:2024-03-24 有效至:永不 可用于:SC 信任度:绝对 有效性:绝对 ssb cv25519/2978529F4782B600 创建于:2024-03-24 有效至:永不 可用于:E ssb rsa4096/EFA3B0684ECE9D91 创建于:2024-03-24 有效至:永不 可用于:AR [ 绝对 ] (1). zebedy <zebedy@example.com> gpg>
和上面相比可以看到已经多了一个摘要为 EFA3B0684ECE9D91
的子密钥。
还有最后一步,输入 save
回车保存就退出 GPG
的交互 shell
了。
至此,子密钥创建完成。
回到查看密钥信息那里。我们再通过 --list-keys
查看当前密钥信息就可以看到这个子密钥了。
$ gpg --list-keys --keyid-format=long [keyboxd] --------- pub ed25519/D188A1DD832AB894 2024-03-24 [SC] A31F6E522B93990CA1A1C548D188A1DD832AB894 uid [ 绝对 ] zebedy <zebedy@example.com> sub cv25519/2978529F4782B600 2024-03-24 [E] sub rsa4096/EFA3B0684ECE9D91 2024-03-24 [AR]
相比上面可以看到到了一个 EFA3B0684ECE9D91
的子密钥
配置 SSH 启用 GPG Agent 的 SSH 支持 $ vim ~/.gnupg/gpg-agent.conf
在文件中单独一行添加 enable-ssh-support
设置 GPG Agent 替代 SSH Agent 修改对应 shell 的配置文件 (我使用的是 zsh
,自己根据使用的 shell
调整)
添加以下内容到合适的地方
export GPG_TTY=$(tty) export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) gpgconf --launch gpg-agent
添加子密钥 keygrip 首先通过 --with-keygrip
获取子密钥的 keygrip
$ gpg --list-keys --with-keygrip --keyid-format=long [keyboxd] --------- pub ed25519/D188A1DD832AB894 2024-03-24 [SC] A31F6E522B93990CA1A1C548D188A1DD832AB894 Keygrip = F95E3D5B168563C4F65853E8C0396815CE819A21 uid [ 绝对 ] zebedy <zebedy@example.com> sub cv25519/2978529F4782B600 2024-03-24 [E] Keygrip = C5F82430DCB7B754782189638CBC8778D3E84AB8 sub rsa4096/EFA3B0684ECE9D91 2024-03-24 [AR] Keygrip = 9C0935998C1D9F9BDE3030BB1C1A10A4454E56F8
找到上一步创建的子密钥 EFA3B0684ECE9D91
他的 Keygrip = 9C0935998C1D9F9BDE3030BB1C1A10A4454E56F8
编辑 ~/.gnupg/sshcontrol
文件
将这个 9C0935998C1D9F9BDE3030BB1C1A10A4454E56F8
添加到单独一行,保存。
然后重启终端
检查 SSH Key
是否存在
$ ssh-add -l 4096 SHA256:GvaU9MfvKVMa9FVM+KN28z+MDCML6429dWeILycSPPw (none) (RSA)
看到类似内容就表示添加成功
导出 SSH 公钥 $ gpg --export-ssh-key EFA3B0684ECE9D91 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC6guDA+iEFZe2op48auILxCkN6IRWJstpp1X/iNtohEcUpBxJ3g0qMKiMQnFHOTsL0PCci2Ifmg740DE5RWC+QPhAiJCl/VT6nUK4wT+wx+0CoseQEg9RLWnq6+WYXi2GLEKZLIdxvpcrsm6IaEIUk8Z8CMbuJocFrOeAGsV9F9QsRIFyqGNw8v6/+rBDDZdfGbKrp54heNM61YtvVDtSSCgMq0iFW8mlxR1F3egaiffJid/LWWlDht15ndB8C+5ZIpK/Tbr6bHy9VWnbXOmxP4MBL4SyTUkEgvAqMEG5PWiS6PsfUbkvWTNRx6TG5RsZ7Xu0AVcB6//ZEHkjZeIeW9glMf7tC3H8bhpadDcDusPCeJv04TuAkFjYZVUSCnvR1qVUxe6VR9rhE6tBi86YGngvIRcWHjVe7o1CiQLSFAp9T5vD1HjRo8Q6pnKP4sq66jXH61MrhLMhLQt3RVryWe2AlPYtcYPlWRrl4uj3o8TKNQDhBFO7tMssHo474eC50epzpdOoC4etzHcIIVmMKSnvSl1Z46LUgkmcgL4Wj0NTqBWx58KFKjpYAT5dcZisvUsGM6pbFgFJRLRUcjibiR3vm3H34p08vaLYW5ldOJKwTf59rGiRI/ileY+1xpBsbc48PBAyX13433Lgw9TnRvjd+Ovkma7PU/QoJPKm+Sw== openpgp:0x4ECE9D91
然后就可以把这个它添加到任何需要使用 SSH
的地方,比如 GitHub
或者自己服务器上的 ~/.ssh/authorized_keys
中。
至此,通过 GPG 生成 SSH 专用密钥的过程就结束了。
创建用于 代码签名 的子密钥 检查密钥邮箱
备注: 如果在初次使用 的时候输入的邮箱不是 GitHub
或者 GitLab
的邮箱。
那么需要在编辑密钥 gpg --expert --edit-key D188A1DD832AB894
的交互中通过 adduid
给主密钥添加对应的邮箱。
$ gpg --edit-key D188A1DD832AB894 gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 私钥可用。 sec ed25519/D188A1DD832AB894 创建于:2024-03-24 有效至:永不 可用于:SC 信任度:绝对 有效性:绝对 ssb cv25519/2978529F4782B600 创建于:2024-03-24 有效至:永不 可用于:E ssb rsa4096/EFA3B0684ECE9D91 创建于:2024-03-24 有效至:永不 可用于:AR [ 绝对 ] (1). zebedy <zebedy@example.com> gpg> adduid 真实姓名: github name # GitHub/GitLab 用户名(也可以不和用户名一致) 电子邮件地址: github@gmail.com # GitHub/GitLab 邮箱(必须一致) 注释: github # 可选 您选定了此用户标识: “github name (github) <github@gmail.com>” 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O sec ed25519/D188A1DD832AB894 创建于:2024-03-24 有效至:永不 可用于:SC 信任度:绝对 有效性:绝对 ssb cv25519/2978529F4782B600 创建于:2024-03-24 有效至:永不 可用于:E ssb rsa4096/EFA3B0684ECE9D91 创建于:2024-03-24 有效至:永不 可用于:AR [ 绝对 ] (1) zebedy <zebedy@example.com> [ 未知 ] (2). github name (github) <github@gmail.com> gpg> save
然后查看密钥信息就可以看到已经包含新的 uid
了。
$ gpg --list-keys --keyid-format=long [keyboxd] --------- pub ed25519/D188A1DD832AB894 2024-03-24 [SC] A31F6E522B93990CA1A1C548D188A1DD832AB894 uid [ 绝对 ] github name (github) <github@gmail.com> uid [ 绝对 ] zebedy <zebedy@example.com> sub cv25519/2978529F4782B600 2024-03-24 [E] sub rsa4096/EFA3B0684ECE9D91 2024-03-24 [AR]
生成子密钥 和上面生成创建用于 SSH 鉴权的子密钥 子密钥的过程类似,但是这里我们不需要自定义密钥功能。所以不必使用 --expert
参数
这里密钥类型可以选择 ECC
也可以选择 RSA
,但是注意,不管是 ECC
还是 RSA
,都需要选择包含 仅用于签名
的选项。
这里我就用 ECC
举例,具体过程就不再赘述,和上面创建子密钥 的过程基本一致,只是没有了自定义密钥功能,过程更简单了。
创建完成后同样记得使用 save
保存后自动退出 GPG
的交互环境,然后查询一下当前的密钥。
$ gpg --list-keys --keyid-format=long [keyboxd] --------- pub ed25519/D188A1DD832AB894 2024-03-24 [SC] A31F6E522B93990CA1A1C548D188A1DD832AB894 uid [ 绝对 ] github name (github) <github@gmail.com> uid [ 绝对 ] zebedy <zebedy@example.com> sub cv25519/2978529F4782B600 2024-03-24 [E] sub rsa4096/EFA3B0684ECE9D91 2024-03-24 [AR] sub ed25519/0623CAE2AAFF25C2 2024-03-24 [S]
就看到了新创建的密钥 0623CAE2AAFF25C2
用途只有 [S]
,只用于签名。
查询子密钥公钥 通过 --export
查询子密钥公钥,但是默认是二进制的格式,所以还需要 --armor
显示为文本格式才能使用。
$ gpg --armor --export 0623CAE2AAFF25C2! -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZf+fkxYJKwYBBAHaRw8BAQdA8JIOJ9bqkGIH/b2Q5B8iLeYC7KhGy8I5AesQ Vgt2eju0J2dpdGh1YiBuYW1lIChnaXRodWIpIDxnaXRodWJAZ21haWwuY29tPoiT BBMWCgA7FiEEox9uUiuTmQyhocVI0Yih3YMquJQFAmX/pYwCGwMFCwkIBwICIgIG FQoJCAsCBBYCAwECHgcCF4AACgkQ0Yih3YMquJSl/wEAqpJRTjfRuUiCrYuIPech ffae/iYtz4St5xtgsgfVRi8BAPcAU9+HLFHZCK80vpiEVlp1jhCIUihetVuxzTJ6 6x8AtBt6ZWJlZHkgPHplYmVkeUBleGFtcGxlLmNvbT6IkwQTFgoAOxYhBKMfblIr k5kMoaHFSNGIod2DKriUBQJl/5+TAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4H AheAAAoJENGIod2DKriUPxgA/1g/tpw/gRrf6zwCVPQfuG5pgV25nqJlHNLqKv2c k8+FAP4ri6zN9Ay5QQX1lEU3xQROGq53irN/ZPBI6d0EP9q5B7gzBGX/pv8WCSsG AQQB2kcPAQEHQIrZWY1psJL/ELYuNi5lXSSUeWLw8wjHA+YvDiLxUyiXiO8EGBYK ACAWIQSjH25SK5OZDKGhxUjRiKHdgyq4lAUCZf+m/wIbAgCBCRDRiKHdgyq4lHYg BBkWCgAdFiEEhVrKN2SCNk5enPJMBiPK4qr/JcIFAmX/pv8ACgkQBiPK4qr/JcKo qAD9HGRow6SUGM7ySZXLxPa/AWa2iHnmbru3z7HheRSZ4q8A/jiCY75rPpsOjT6k rRejWTCDEJFL5SLdnWSsFwzbTQUE5FUA/j/CphTxuujBMdu/52EHwYg5Bo2+eeLp AFNyPSyt71g0AQDNhS5X8GQ1GSBZ5CvBRZ/fRd0vShn3kikkTt51UP9OBA== =qGsF -----END PGP PUBLIC KEY BLOCK-----
为什么要在摘要末尾添加一个 !
号呢?
因为如果没有这个感叹号则会导出这个子密钥所属的主密钥下的所有公钥。
$ gpg --armor --export 0623CAE2AAFF25C2 -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZf+fkxYJKwYBBAHaRw8BAQdA8JIOJ9bqkGIH/b2Q5B8iLeYC7KhGy8I5AesQ Vgt2eju0J2dpdGh1YiBuYW1lIChnaXRodWIpIDxnaXRodWJAZ21haWwuY29tPoiT BBMWCgA7FiEEox9uUiuTmQyhocVI0Yih3YMquJQFAmX/pYwCGwMFCwkIBwICIgIG FQoJCAsCBBYCAwECHgcCF4AACgkQ0Yih3YMquJSl/wEAqpJRTjfRuUiCrYuIPech ffae/iYtz4St5xtgsgfVRi8BAPcAU9+HLFHZCK80vpiEVlp1jhCIUihetVuxzTJ6 6x8AtBt6ZWJlZHkgPHplYmVkeUBleGFtcGxlLmNvbT6IkwQTFgoAOxYhBKMfblIr k5kMoaHFSNGIod2DKriUBQJl/5+TAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4H AheAAAoJENGIod2DKriUPxgA/1g/tpw/gRrf6zwCVPQfuG5pgV25nqJlHNLqKv2c k8+FAP4ri6zN9Ay5QQX1lEU3xQROGq53irN/ZPBI6d0EP9q5B7g4BGX/n5MSCisG AQQBl1UBBQEBB0DLVTiDrM7loVyWzEQPpHDjsjtUz6tKLINI+I4Sr1pfWQMBCAeI eAQYFgoAIBYhBKMfblIrk5kMoaHFSNGIod2DKriUBQJl/5+TAhsMAAoJENGIod2D KriUPiYA/j2FEaBqUYpR497NgPggF0WNe55OJGF38ER3WqFOTcxzAP9vPRsBp+Jx s4MHTfnU+v7XZNNASWeomn8/+9+241kWDrkCDQRl/6GfARAAuoLgwPohBWXtqKeP GriC8QpDeiEVibLaadV/4jbaIRHFKQcSd4NKjCojEJxRzk7C9DwnItiH5oO+NAxO UVgvkD4QIiQpf1U+p1CuME/sMftAqLHkBIPUS1p6uvlmF4thixCmSyHcb6XK7Jui GhCFJPGfAjG7iaHBazngBrFfRfULESBcqhjcPL+v/qwQw2XXxmyq6eeIXjTOtWLb 1Q7UkgoDKtIhVvJpcUdRd3oGon3yYnfy1lpQ4bdeZ3QfAvuWSKSv026+mx8vVVp2 1zpsT+DAS+Esk1JBILwKjBBuT1okuj7H1G5L1kzUcekxuUbGe17tAFXAev/2RB5I 2XiHlvYJTH+7Qtx/G4aWnQ3A7rDwnib9OE7gJBY2GVVEgp70dalVMXulUfa4ROrQ YvOmBp4LyEXFh41Xu6NQokC0hQKfU+bw9R40aPEOqZyj+LKuuo1x+tTK4SzIS0Ld 0Va8lntgJT2LXGD5Vka5eLo96PEyjUA4QRTu7TLLB6OO+HgudHqc6XTqAuHrcx3C CFZjCkp70pdWeOi1IJJnIC+Fo9DU6gVsefChSo6WAE+XXGYrL1LBjOqWxYBSUS0V HI4m4kd75tx9+KdPL2i2FuZXTiSsE3+faxokSP4pXmPtcaQbG3OPDwQMl9d+N9y4 MPU50b43fjr5Jmuz1P0KCTypvksAEQEAAYhvBBgWCgAhFiEEox9uUiuTmQyhocVI 0Yih3YMquJQFAmX/oZ8DGyAEAACPZwD9GPj32r7XUNSffp2lPSNhV8eAMVxzdkov lYEWNJuCTZ0A/3gCT77sacaH3jDmoeT8yhFxA4YR8CcVteiXt3/RVCAAuDMEZf+m /xYJKwYBBAHaRw8BAQdAitlZjWmwkv8Qti42LmVdJJR5YvDzCMcD5i8OIvFTKJeI 7wQYFgoAIBYhBKMfblIrk5kMoaHFSNGIod2DKriUBQJl/6b/AhsCAIEJENGIod2D KriUdiAEGRYKAB0WIQSFWso3ZII2Tl6c8kwGI8riqv8lwgUCZf+m/wAKCRAGI8ri qv8lwqioAP0cZGjDpJQYzvJJlcvE9r8BZraIeeZuu7fPseF5FJnirwD+OIJjvms+ mw6NPqStF6NZMIMQkUvlIt2dZKwXDNtNBQTkVQD+P8KmFPG66MEx27/nYQfBiDkG jb554ukAU3I9LK3vWDQBAM2FLlfwZDUZIFnkK8FFn99F3S9KGfeSKSRO3nVQ/04E =7KWW -----END PGP PUBLIC KEY BLOCK-----
因为我们只需要这个子密钥,所以使用 !
只包含该子密钥的公钥就行。
然后将该公钥添加到 GitHub
或者 GitLab
中即可。
配置 Git 给 Git 全局配置签名 Key
git config --global user.signingkey 0623CAE2AAFF25C2!
如果不需要自动使用 GPG 签名代码,可以每次在 commit
的时候使用 -S
参数(大写S)进行签名
如果想提交的时候自动签名,可以进行配置。
git config --global commit.gpgsign true
然后再次提交代码后就可以查看签名信息了。
同时 push
到 GitHub
上后也可以看到提交有一个 verified
的标记。
至此,创建用于代码签名的子密钥结束。