GPG 密钥生成与管理
列出所有密钥
gpg --list-keys
编辑 Comment
gpg --edit-key 1234567890ABCDEF
gpg> adduid
Real name: 张三
Email address: zhangsan@example.com
Comment: Git commit signing
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
gpg> uid 1 # 选择旧 UID
gpg> deluid # 删除旧 UID(可选)
gpg> save
GPG 不允许直接修改现有 UID 的 Comment,常见的做法是:添加新的 UID,再删除旧的 UID
生成
生成私钥/公钥对
# version >= 2.1.17
gpg --full-generate-key
# version < 2.1.17
gpg --default-new-key-algo rsa4096 --gen-key
选择哪种算法
# 默认选择第一种, RSA and RSA
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(14) Existing key from card
选择算法长度
# 4096
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
指定密钥的有效期
# 默认 0,长期有效
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
确认是否正确
# y,确认
Key does not expire at all
Is this correct? (y/N) y
输入相关信息
输入您的真实姓名、与此密钥关联的电子邮件地址(应与您在 Git 托管平台中使用的已验证电子邮件地址匹配)和可选注释(按 Enter 键跳过)
确认相关信息
# y,确认
You selected this USER-ID:
"Jetsung Chan (Git) <i@jetsung.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
证书密码
输入密码时,选择一个强密码,并输入两次确认
列出密钥
gpg --list-secret-keys --keyid-format LONG <your_email>
密钥 ID
复制以 sec 开头的 GPG 密钥 ID
sec rsa4096/AE5C42F5EFF9F186 2022-08-09 [SC]
58296BDE2D8A35419FD3D089AE5C42F5EFF9F186
uid [ultimate] Jetsung Chan (Code signing key) <i@jetsung.com>
ssb rsa4096/A15BA1665256FA03 2022-08-09 [E]
pub: 该密钥的公钥特征,包括了密钥的参数(加密算法是rsa,长度为2048,生成于2022-08-09,用途是Signing和Certificating,一年之后过期)以及密钥的ID。\
uid: 生成密钥时所输入的个人信息。\
sub: 该密钥的子密钥特征,格式和公钥部分大致相同(E表示用途是Encrypting)。
pub(在 --list-keys 中):表示主公钥。
sub(在 --list-keys 中):表示子公钥,通常用于加密。
sec(在 --list-secret-keys 中):表示主私钥。
ssb(在 --list-secret-keys 中):表示子私钥,通常用于解密或签名。
导出该ID的公钥
# sec rsa4096/AE5C42F5EFF9F186 2022-08-09 [SC]
gpg --armor --export AE5C42F5EFF9F186
# 或者
# ssb rsa4096/A15BA1665256FA03 2022-08-09 [E]
gpg --armor --export A15BA1665256FA03
sec 中的 AE5C42F5EFF9F186
或
ssb 中的 A15BA1665256FA03
备份
列出密钥
# 列出所有密钥
gpg --list-secret-keys --keyid-format=long
# 列出指定邮箱的密钥
gpg --list-secret-keys --keyid-format LONG i@jetsung.com
# 直接打印
gpg --armor --export-secret-key AE5C42F5EFF9F186
# 保存到文件 (ASCII 文本(Base64 编码))
gpg --export-secret-key --output private.asc --armor AE5C42F5EFF9F186
gpg --export-secret-keys --armor AE5C42F5EFF9F186 > private.asc
# 保存到文件 (二进制格式)无 --armor 参数
gpg --output private.bin --export-secret-key AE5C42F5EFF9F186
gpg --export-secret-keys AE5C42F5EFF9F186 > private.asc
# 保存所有私钥到文件
gpg --export-secret-key --output privates.asc
gpg --export-secret-key > ./privates.asc
# 列出所有密钥
gpg --list-keys --keyid-format=long
# 列出指定邮箱的密钥
gpg --list-keys --keyid-format LONG i@jetsung.com
# 直接打印
gpg --armor --export AE5C42F5EFF9F186
# 保存到文件 (ASCII 文本(Base64 编码))
gpg --armor --output public.asc --export AE5C42F5EFF9F186
gpg --armor --export AE5C42F5EFF9F186 > public.asc
# 保存到文件 (二进制格式)无 --armor 参数
gpg --output public.asc --export AE5C42F5EFF9F186
gpg --export AE5C42F5EFF9F186 > public.asc
gpg --import ./my-key.asc
删除
gpg --delete-secret-key "用户ID或密钥ID"
gpg --delete-key "用户ID或密钥ID"
修改密钥密码(包括清空)
gpg --edit-key KEYID
→passwd
→ 设置新密码(或留空)