GPG 加密/签名

网站

网站 名称 说明
https://keys.openpgp.org 公钥服务器 用于搜索 gpg 公钥
keys.openpgp.org 公钥服务器上传页面 用于上传 gpg 公钥
keys.openpgp.org 公钥服务器管理页面 用于删除 gpg 公钥
https://keys.openpgp.org/debug?q=A6592FF32F400C6D0CD7B1495862F49BC20BC316 公钥服务显示证书信息页面 用于快速查看 gpg 公钥
https://keyserver.ubuntu.com
https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=index&search=88BE34F94BDB2B5357044E2E3A387D43964143E3

安装

  1. Windows 版本下载页面:Gpg4win - Thanks for downloading
  2. Mac
    brew install gnupg
    
  3. Debian / Ubuntu (使用 apt)
    sudo apt update
    sudo apt install gnupg
    
  4. CentOS / RHEL / Fedora (使用 yumdnf)
    sudo yum install gnupg
    
    sudo dnf install gnupg
    
  5. Arch Linux / Manjaro (使用 pacman)
    sudo pacman -S gnupg
    
  6. openSUSE (使用 zypper)
    sudo zypper install gnupg
    

切换语言

# 查看语言
locale
# 中文
# sudo apt update
# sudo apt install -y locales language-pack-zh-hans
# sudo locale-gen zh_CN.UTF-8
# sudo update-locale LANG=zh_CN.UTF-8

LANG=zh_CN.UTF-8
# 英文
LANG=C

生成一个新的密钥对

# 生成一个新的密钥对
gpg --generate-key
# 快速生成一个新的密钥对
gpg --quick-generate-key

完整功能的密钥对生成

# 完整功能的密钥对生成
gpg --full-generate-key
# 中文示例
root@xuxiaowei:~# gpg --full-generate-key
gpg (GnuPG) 2.4.7; 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)卡中现有密钥 
您的选择是? 
请选择您想要使用的椭圆曲线:
   (1) Curve 25519 *默认*
   (4) NIST P-384
   (6) Brainpool P-256
您的选择是? 
请设定这个密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 730
密钥于 2027年11月08日 星期一 00时06分04秒 CST 过期
这些内容正确吗? (y/N) y

GnuPG 需要构建用户标识以辨认您的密钥。

真实姓名: 徐晓伟
电子邮件地址: xuxiaowei@xuxiaowei.com.cn
注释: 仅用于发布jar包时签名
您正在使用‘utf-8’字符集。
您选定了此用户标识:
    “徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
gpg: 目录‘/root/.gnupg/openpgp-revocs.d’已创建
gpg: 吊销证书已被存储为‘/root/.gnupg/openpgp-revocs.d/B61645D1F1C1B1938E084ECC159AED3074FAD4FA.rev’
公钥和私钥已经生成并被签名。

pub   ed25519 2025-11-07 [SC] [有效至:2027-11-07]
      B61645D1F1C1B1938E084ECC159AED3074FAD4FA
uid                      徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>
sub   cv25519 2025-11-07 [E] [有效至:2027-11-07]

root@xuxiaowei:~# 
# 英文示例
root@xuxiaowei:~# gpg --full-generate-key
gpg (GnuPG) 2.4.7; 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.

Please select what kind of key you want:
   (1) RSA and RSA
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (9) ECC (sign and encrypt) *default*
  (10) ECC (sign only)
  (14) Existing key from card
Your selection? 
Please select which elliptic curve you want:
   (1) Curve 25519 *default*
   (4) NIST P-384
   (6) Brainpool P-256
Your selection? 
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) 730
Key expires at Mon Nov  8 00:10:22 2027 CST
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: 徐晓伟
Email address: xuxiaowei@xuxiaowei.com.cn
Comment: 仅用于发布jar包时签名
You are using the 'iso-8859-1' character set.
You selected this USER-ID:
    "徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6.rev'
public and secret key created and signed.

pub   ed25519 2025-11-07 [SC] [expires: 2027-11-07]
      18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6
uid                      徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>
sub   cv25519 2025-11-07 [E] [expires: 2027-11-07]

root@xuxiaowei:~# 

列出密钥

# 列出密钥
gpg --list-keys
# 示例
root@xuxiaowei:~# gpg --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub   ed25519 2025-11-07 [SC] [expires: 2027-11-07]
      18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6
uid           [ultimate] 徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>
sub   cv25519 2025-11-07 [E] [expires: 2027-11-07]

root@xuxiaowei:~# 
# 不存在时,创建密钥文件(夹):中文
root@xuxiaowei:~# gpg --list-keys
gpg: 目录‘/root/.gnupg’已创建
gpg: 钥匙箱‘/root/.gnupg/pubring.kbx’已创建
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
root@xuxiaowei:~#
# 不存在时,创建密钥文件(夹):英文
root@xuxiaowei:~# gpg --list-keys
gpg: directory '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: /root/.gnupg/trustdb.gpg: trustdb created
root@xuxiaowei:~#

指纹

gpg --list-keys --with-colons --fingerprint
# gpg --list-keys --with-colons --fingerprint A6592FF32F400C6D0CD7B1495862F49BC20BC316
# gpg --list-keys --with-colons --fingerprint A6592FF32F400C6D0CD7B1495862F49BC20BC316 | awk -F: '/^fpr:/ {print $10; exit}'

列出公钥

gpg --list-public-keys

列出私钥

gpg --list-secret-keys

导出公钥

# 导出公钥
# 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 是密钥的ID
gpg --armor --export 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6
# 导出公钥示例
# 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 是密钥的ID
root@xuxiaowei:~# gpg --armor --export 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6
-----BEGIN PGP PUBLIC KEY BLOCK-----

mDMEaQ4aERYJKwYBBAHaRw8BAQdAH4e0I5bQyqq7Y1KCkl+zdrSFwmQ8Rfk6Zvy0
165tchO0a8Olwr7CkMOmwpnCk8OkwrzCnyAow6TCu8KFw6fClMKow6TCusKOw6XC
j8KRw6XCuMKDamFyw6XCjMKFw6bCl8K2w6fCrcK+w6XCkMKNKSA8eHV4aWFvd2Vp
QHh1eGlhb3dlaS5jb20uY24+iJYEExYKAD4WIQQYaIuDUvTb0M1MhvY1pMfG4wpV
1gUCaQ4aEQIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRA1pMfG
4wpV1gQKAQCbdYC3tSJvWRHWtY/qO9hVVJfsJoUMLXzjGnf40fhk9wD+PFWtE2QT
PxNrjVQ3/0rTFXBHupwThYrla0PEUmXemwq4OARpDhoREgorBgEEAZdVAQUBAQdA
wS1jg62STLQy4vXyUrp6KF3CbZiAdNm4Tpqw/pinulwDAQgHiH4EGBYKACYWIQQY
aIuDUvTb0M1MhvY1pMfG4wpV1gUCaQ4aEQIbDAUJA8JnAAAKCRA1pMfG4wpV1lU+
AP0Tn7N9fxdv7eySSeH/r7iXXJ8ebETYrqOZBNcxcpWjVAD+PRLqXbdvJbpdNuob
XovL9/+xINVNLY0SEPy/Y7D4twA=
=BvF/
-----END PGP PUBLIC KEY BLOCK-----
root@xuxiaowei:~# 
# 导出公钥:输出到文件中
# 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 是密钥的ID
gpg --armor --export 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 > public-key.asc

导出私钥

# 导出私钥
# 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 是密钥的ID
gpg --armor --export-secret-keys 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6
# 导出私钥示例
# 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 是密钥的ID
root@xuxiaowei:~# gpg --armor --export-secret-keys 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6
-----BEGIN PGP PRIVATE KEY BLOCK-----

lFgEaQ4aERYJKwYBBAHaRw8BAQdAH4e0I5bQyqq7Y1KCkl+zdrSFwmQ8Rfk6Zvy0
165tchMAAQD/bOM9EUf4WOTRYl1ImjE91KZB8Qqe6oQiB7XU0FICSA/YtGvDpcK+
wpDDpsKZwpPDpMK8wp8gKMOkwrvChcOnwpTCqMOkwrrCjsOlwo/CkcOlwrjCg2ph
csOlwozChcOmwpfCtsOnwq3CvsOlwpDCjSkgPHh1eGlhb3dlaUB4dXhpYW93ZWku
Y29tLmNuPoiWBBMWCgA+FiEEGGiLg1L029DNTIb2NaTHxuMKVdYFAmkOGhECGwMF
CQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQNaTHxuMKVdYECgEAm3WA
t7Uib1kR1rWP6jvYVVSX7CaFDC184xp3+NH4ZPcA/jxVrRNkEz8Ta41UN/9K0xVw
R7qcE4WK5WtDxFJl3psKnF0EaQ4aERIKKwYBBAGXVQEFAQEHQMEtY4Otkky0MuL1
8lK6eihdwm2YgHTZuE6asP6Yp7pcAwEIBwAA/0GgGCGrDoTscsRPa6LYBp+ZaxJE
vp8RZWeaxr+O+234EPKIfgQYFgoAJhYhBBhoi4NS9NvQzUyG9jWkx8bjClXWBQJp
DhoRAhsMBQkDwmcAAAoJEDWkx8bjClXWVT4A/ROfs31/F2/t7JJJ4f+vuJdcnx5s
RNiuo5kE1zFylaNUAP49Eupdt28lul026htei8v3/7Eg1U0tjRIQ/L9jsPi3AA==
=vvjA
-----END PGP PRIVATE KEY BLOCK-----
root@xuxiaowei:~# 
# 导出私钥:输出到文件中
# 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 是密钥的ID
gpg --armor --export-secret-keys 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 > private-key.asc

仅查看文件(不导入)

# 查看私钥文件
# xxx.asc 是密钥的文件名(路径)
gpg --dry-run --import --import-options show-only xxx.asc

导入私钥

# 导入私钥文件
# xxx.asc 是密钥的文件名(路径)
gpg --import xxx.asc

从公钥钥匙环里删除密钥

# 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 是密钥的ID
gpg --delete-keys 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6

从私钥钥匙环里删除密钥

# 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6 是密钥的ID
gpg --delete-secret-keys 18688B8352F4DBD0CD4C86F635A4C7C6E30A55D6

分离签名

gpg --detach-sign --armor 文件名

验证签名

gpg --verify 文件名.asc 文件名

帮助文档

# 中文
root@xuxiaowei:~# gpg -h
gpg (GnuPG) 2.4.7
libgcrypt 1.11.0
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: /root/.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

语法:gpg [选项] [文件]
签名、检查、加密或解密
默认的操作依输入数据而定

命令:
 
 -s, --sign                         生成一份签名
     --clear-sign                   生成一份明文签名
 -b, --detach-sign                  生成一份分离的签名
 -e, --encrypt                      加密数据
 -c, --symmetric                    仅使用对称密文加密
 -d, --decrypt                      解密数据(默认)
     --verify                       验证签名
 -k, --list-keys                    列出密钥
     --list-signatures              列出密钥和签名
     --check-signatures             列出并检查密钥签名
     --fingerprint                  列出密钥和指纹
 -K, --list-secret-keys             列出私钥
     --generate-key                 生成一个新的密钥对
     --quick-generate-key           快速生成一个新的密钥对
     --quick-add-uid                快速添加一个新的用户标识
     --quick-revoke-uid             快速吊销一个用户标识
     --quick-set-expire             快速设置一个过期日期
     --full-generate-key            完整功能的密钥对生成
     --generate-revocation          生成一份吊销证书
     --delete-keys                  从公钥钥匙环里删除密钥
     --delete-secret-keys           从私钥钥匙环里删除密钥
     --quick-sign-key               快速签名一个密钥
     --quick-lsign-key              快速本地签名一个密钥
     --quick-revoke-sig             快速吊销一个密钥签名
     --sign-key                     签名一个密钥
     --lsign-key                    本地签名一个密钥
     --edit-key                     签名或编辑一个密钥
     --change-passphrase            更改密码
     --export                       导出密钥
     --send-keys                    将密钥导出到一个公钥服务器上
     --receive-keys                 从公钥服务器上导入密钥
     --search-keys                  在公钥服务器上搜索密钥
     --refresh-keys                 从公钥服务器更新所有密钥
     --import                       导入/合并密钥
     --card-status                  打印卡片状态
     --edit-card                    更改卡片上的数据
     --change-pin                   更改卡片的 PIN
     --update-trustdb               更新信任数据库
     --print-md                     打印消息摘要
     --server                       以服务器模式运行
     --tofu-policy VALUE            设置一个密钥的 TOFU 政策

控制诊断输出的选项:
 -v, --verbose                      详细模式
 -q, --quiet                        尽量减少提示信息
     --options FILE                 从 FILE 中读取选项
     --log-file FILE                将服务器模式的日志写入到 FILE

控制配置的选项:
     --default-key NAME             使用 NAME 作为默认的私钥
     --encrypt-to NAME              同时给以 NAME 为名称的用户标识加密
     --group SPEC                   设置电子邮件别名
     --openpgp                      使用严格的 OpenPGP 行为
 -n, --dry-run                      不做任何更改
 -i, --interactive                  覆盖前提示

控制输出的选项:
 -a, --armor                        创建 ASCII 字符封装的输出
 -o, --output FILE                  写输出到 FILE
 -z N                               设置压缩等级为 N (0 为禁用)

控制密钥导入导出的选项:
     --auto-key-locate MECHANISMS   通过邮件地址定位密钥时使用机制 MECHANISMS
     --auto-key-import              从签名中导入缺少的密钥
     --include-key-block            在签名中包含公钥
     --disable-dirmngr              禁用对 dirmngr 的所有访问

指定密钥的选项:
 -r, --recipient USER-ID            为 USER-ID 加密
 -u, --local-user USER-ID           使用 USER-ID 来签名或者解密

(请参考手册页以获得所有命令和选项的完整列表)

例子:

 -se -r Bob [文件]          为用户 Bob 签名和加密
 --clear-sign [文件]        创建一个明文签名
 --detach-sign [文件]       创建一个分离签名
 --list-keys [名字]        列出密钥
 --fingerprint [名字]      显示指纹

请向 <https://bugs.gnupg.org> 报告程序缺陷。
请向 <i18n-zh@googlegroups.com> 邮件列表反映简体中文的翻译问题或建议。
root@xuxiaowei:~# 
# 英文
root@xuxiaowei:~# gpg -h
gpg (GnuPG) 2.4.7
libgcrypt 1.11.0
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: /root/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Syntax: gpg [options] [files]
Sign, check, encrypt or decrypt
Default operation depends on the input data

Commands:
 
 -s, --sign                         make a signature
     --clear-sign                   make a clear text signature
 -b, --detach-sign                  make a detached signature
 -e, --encrypt                      encrypt data
 -c, --symmetric                    encryption only with symmetric cipher
 -d, --decrypt                      decrypt data (default)
     --verify                       verify a signature
 -k, --list-keys                    list keys
     --list-signatures              list keys and signatures
     --check-signatures             list and check key signatures
     --fingerprint                  list keys and fingerprints
 -K, --list-secret-keys             list secret keys
     --generate-key                 generate a new key pair
     --quick-generate-key           quickly generate a new key pair
     --quick-add-uid                quickly add a new user-id
     --quick-revoke-uid             quickly revoke a user-id
     --quick-set-expire             quickly set a new expiration date
     --full-generate-key            full featured key pair generation
     --generate-revocation          generate a revocation certificate
     --delete-keys                  remove keys from the public keyring
     --delete-secret-keys           remove keys from the secret keyring
     --quick-sign-key               quickly sign a key
     --quick-lsign-key              quickly sign a key locally
     --quick-revoke-sig             quickly revoke a key signature
     --sign-key                     sign a key
     --lsign-key                    sign a key locally
     --edit-key                     sign or edit a key
     --change-passphrase            change a passphrase
     --export                       export keys
     --send-keys                    export keys to a keyserver
     --receive-keys                 import keys from a keyserver
     --search-keys                  search for keys on a keyserver
     --refresh-keys                 update all keys from a keyserver
     --import                       import/merge keys
     --card-status                  print the card status
     --edit-card                    change data on a card
     --change-pin                   change a card's PIN
     --update-trustdb               update the trust database
     --print-md                     print message digests
     --server                       run in server mode
     --tofu-policy VALUE            set the TOFU policy for a key

Options controlling the diagnostic output:
 -v, --verbose                      verbose
 -q, --quiet                        be somewhat more quiet
     --options FILE                 read options from FILE
     --log-file FILE                write server mode logs to FILE

Options controlling the configuration:
     --default-key NAME             use NAME as default secret key
     --encrypt-to NAME              encrypt to user ID NAME as well
     --group SPEC                   set up email aliases
     --openpgp                      use strict OpenPGP behavior
 -n, --dry-run                      do not make any changes
 -i, --interactive                  prompt before overwriting

Options controlling the output:
 -a, --armor                        create ascii armored output
 -o, --output FILE                  write output to FILE
 -z N                               set compress level to N (0 disables)

Options controlling key import and export:
     --auto-key-locate MECHANISMS   use MECHANISMS to locate keys by mail address
     --auto-key-import              import missing key from a signature
     --include-key-block            include the public key in signatures
     --disable-dirmngr              disable all access to the dirmngr

Options to specify keys:
 -r, --recipient USER-ID            encrypt for USER-ID
 -u, --local-user USER-ID           use USER-ID to sign or decrypt

(See the man page for a complete listing of all commands and options)

Examples:

 -se -r Bob [file]          sign and encrypt for user Bob
 --clear-sign [file]        make a clear text signature
 --detach-sign [file]       make a detached signature
 --list-keys [names]        show keys
 --fingerprint [names]      show fingerprints

Please report bugs to <https://bugs.gnupg.org>.
root@xuxiaowei:~# 

验证示例

列出公钥

gpg --list-public-keys

从公钥钥匙环里删除密钥

# A6592FF32F400C6D0CD7B1495862F49BC20BC316 是密钥的ID
gpg --delete-keys A6592FF32F400C6D0CD7B1495862F49BC20BC316

验证

下载文件

尝试验证(验证失败,无公钥)

xuxiaowei@172  ~/Downloads  gpg --verify nacos-core-3.2.1.jar.asc nacos-core-3.2.1.jar
gpg: 签名建立于 五  4/24 05:12:05 2026 CST
gpg:               使用 RSA 密钥 A6592FF32F400C6D0CD7B1495862F49BC20BC316
gpg: 无法检查签名:缺少公钥
✘ xuxiaowei@172  ~/Downloads  

下载公钥

xuxiaowei@172  ~/Downloads  gpg --keyserver keys.openpgp.org --recv-keys A6592FF32F400C6D0CD7B1495862F49BC20BC316
gpg: 密钥 5862F49BC20BC316:公钥 “徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>” 已导入
gpg: 处理的总数:1
gpg:               已导入:1
xuxiaowei@172  ~/Downloads  

列出公钥(未信任)

xuxiaowei@172  ~/Downloads  gpg --list-public-keys
[keyboxd]
---------
pub   rsa3072 2025-11-07 [SC] [有效至:2026-11-07]
A6592FF32F400C6D0CD7B1495862F49BC20BC316
uid             [ 未知 ] 徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>
sub   rsa3072 2025-11-07 [E] [有效至:2026-11-07]
86AB9B1A641500F3EBBF43960FF07E175C6ECCD1

xuxiaowei@172  ~/Downloads 

尝试验证(未信任公钥)

xuxiaowei@172  ~/Downloads  gpg --verify nacos-core-3.2.1.jar.asc nacos-core-3.2.1.jar
gpg: 签名建立于 五  4/24 05:12:05 2026 CST
gpg:               使用 RSA 密钥 A6592FF32F400C6D0CD7B1495862F49BC20BC316
gpg: 完好的签名,来自于 “徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>” [未知]
gpg: 警告:此密钥未被受信任签名认证!
gpg:       没有证据表明此签名属于其声称的所有者。
A6592FF32F400C6D0CD7B1495862F49BC20BC316
xuxiaowei@172  ~/Downloads  

信任公钥

  1. 编辑:gpg --edit-key A6592FF32F400C6D0CD7B1495862F49BC20BC316
  2. 信任:输入 trust
  3. 我绝对相信:输入 5
  4. 确认:输入 y
  5. 退出:quit
xuxiaowei@172  ~/Downloads  gpg --edit-key A6592FF32F400C6D0CD7B1495862F49BC20BC316
gpg (GnuPG) 2.5.19; Copyright (C) 2025 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.


pub  rsa3072/5862F49BC20BC316
创建于:2025-11-07  有效至:2026-11-07  可用于:SC  
信任度:未知        有效性:未知
sub  rsa3072/0FF07E175C6ECCD1
创建于:2025-11-07  有效至:2026-11-07  可用于:E   
[ 未知 ] (1). 徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>

gpg> trust
pub  rsa3072/5862F49BC20BC316
创建于:2025-11-07  有效至:2026-11-07  可用于:SC  
信任度:未知        有效性:未知
sub  rsa3072/0FF07E175C6ECCD1
创建于:2025-11-07  有效至:2026-11-07  可用于:E   
[ 未知 ] (1). 徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>

请决定您对这名用户能否正确地验证其他用户密钥
(通过查看护照,检查不同来源的的指纹等等)的相信程度

1 = 我不知道或不作答
2 = 我不相信
3 = 我勉强相信
4 = 我完全相信
5 = 我绝对相信
m = 回到主菜单

您的决定是什么? 5
您真的要把这个密钥设置成绝对信任?(y/N) y

pub  rsa3072/5862F49BC20BC316
创建于:2025-11-07  有效至:2026-11-07  可用于:SC  
信任度:绝对        有效性:未知
sub  rsa3072/0FF07E175C6ECCD1
创建于:2025-11-07  有效至:2026-11-07  可用于:E   
[ 未知 ] (1). 徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>
请注意,在您重启程序之前,所显示的密钥有效性不一定正确。

gpg> quit
xuxiaowei@172  ~/Downloads  

提示重启

  • gpgconf --kill all
xuxiaowei@172  ~/Downloads  gpg --verify nacos-core-3.2.1.jar.asc nacos-core-3.2.1.jar
gpg: 签名建立于 五  4/24 05:12:05 2026 CST
gpg:               使用 RSA 密钥 A6592FF32F400C6D0CD7B1495862F49BC20BC316
gpg: 警告:服务器 ‘keyboxd’ 比我们的版本更老 (2.4.8 < 2.5.19)
gpg: 注意: 过时的服务器可能缺少重要的安全修复。
gpg: 注意: 使用 “gpgconf --kill all” 来重启他们。
gpg: 无法检查签名:缺少公钥
✘ xuxiaowei@172  ~/Downloads 

列出公钥(已信任)

xuxiaowei@172  ~/Downloads  gpg --list-public-keys

[keyboxd]
---------
pub   rsa3072 2025-11-07 [SC] [有效至:2026-11-07]
      A6592FF32F400C6D0CD7B1495862F49BC20BC316
uid             [ 绝对 ] 徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>
sub   rsa3072 2025-11-07 [E] [有效至:2026-11-07]
      86AB9B1A641500F3EBBF43960FF07E175C6ECCD1

xuxiaowei@172  ~/Downloads  

验证完成

xuxiaowei@172  ~/Downloads  gpg --verify nacos-core-3.2.1.jar.asc nacos-core-3.2.1.jar
gpg: 签名建立于 五  4/24 05:12:05 2026 CST
gpg:               使用 RSA 密钥 A6592FF32F400C6D0CD7B1495862F49BC20BC316
gpg: 完好的签名,来自于 “徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>” [绝对]
xuxiaowei@172  ~/Downloads 

信任公钥帮助文档

xuxiaowei@172  ~/Downloads  gpg --edit-key A6592FF32F400C6D0CD7B1495862F49BC20BC316
gpg (GnuPG) 2.5.19; Copyright (C) 2025 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.


pub  rsa3072/5862F49BC20BC316
创建于:2025-11-07  有效至:2026-11-07  可用于:SC  
信任度:未知        有效性:未知
sub  rsa3072/0FF07E175C6ECCD1
创建于:2025-11-07  有效至:2026-11-07  可用于:E   
[ 未知 ] (1). 徐晓伟 (仅用于发布jar包时签名) <xuxiaowei@xuxiaowei.com.cn>

gpg> help
quit        退出此菜单
save        保存并退出
help        显示此帮助
fpr         显示密钥指纹
grip        显示 keygrip
list        列出密钥和用户标识
uid         选择用户标识 N
key         选择子密钥 N
check       检查签名
sign        为所选用户标识添加签名 [* 参见下面的相关命令]
lsign       为所选用户标识添加本地签名
tsign       为所选用户标识添加信任签名
nrsign      为所选用户标识添加不可吊销签名
deluid      删除选定的用户标识
delkey      删除选定的子密钥
delsig      从所选用户标识上删除签名
pref        列出偏好设置(专家模式)
showpref    列出偏好设置(详细模式)
trust       变更信任度
revsig      吊销所选用户标识上的签名
enable      启用密钥
disable     禁用密钥
showphoto   显示选定的照片标识
clean       压缩不可用的用户标识并从密钥上移除不可用的签名
minimize    压缩不可用的用户标识并从密钥上移除所有签名

* ‘sign’命令可以通过‘l’前缀(lsign)进行本地签名,‘t’前缀(tsign)进行
  信任签名,‘nr’前缀(nrsign)进行不可吊销签名,
  或者上述三种前缀的任意组合(ltsign、tnrsign 等)。

gpg>

自动信任

密钥信任级别

  • 6 : 绝对信任 (ultimate)
  • 5 : 完全信任 (full)
  • 4 : 边际信任 (marginal)

信任证书

# 下载证书
gpg --keyserver keys.openpgp.org --recv-keys A6592FF32F400C6D0CD7B1495862F49BC20BC316
# 信任证书
echo "A6592FF32F400C6D0CD7B1495862F49BC20BC316:6:" | gpg --import-ownertrust

GPG 公钥服务器本质上是一个公开的、去中心化的全球数据库,专门用于发布和检索 OpenPGP 公钥。它的核心价值在于,你只需将公钥上传到其中一台服务器,它就能通过同步机制,让这份公钥在全球的服务器网络中传播开来,大大方便了他人找到你。

同时,了解它潜在的安全风险与正确的使用方式同样重要。

:world_map: 常用公钥服务器列表

社区里有多台公钥服务器,为了获得更好的使用体验,建议优先选择 hkps:// 开头的安全连接。以下是目前一些常见的服务器:

服务器地址 状态/说明 协议/端口 备注
keys.openpgp.org :white_check_mark: 推荐,功能强大 hkps 精简高效,需要邮件验证,隐私保护较好。
keyserver.ubuntu.com :white_check_mark: 推荐,稳定可靠 hkps Ubuntu 官方推荐,负载能力强,在国内访问也比较顺畅。
pgp.mit.edu :warning: 传统但较慢 hkp MIT 维护的老牌服务器,历史悠久但速度较慢,稳定性一般。
keyring.debian.org :white_check_mark: 可用 hkp Debian 项目官方服务器。
pgp.surfnet.nl :white_check_mark: 可用 https 荷兰 SURFnet 提供的服务器,运行稳定。
pgp.circl.lu :white_check_mark: 可用 http 卢森堡安全事件响应中心运营。
keys.gnupg.net 可用 hkp GnuPG 相关服务器,但其状态可能时有变化。

小提示:一些老教程推荐的 subkeys.pgp.net 等旧式 hkp 池服务器已不再推荐使用。

:hammer_and_wrench: 如何使用公钥服务器

大部分操作都可以通过 gpg 命令完成。

  • :wrench: 核心命令行操作

    • 配置与上传gpg --keyserver hkps://keys.openpgp.org --send-key <你的KeyID>
    • 搜索与导入gpg --keyserver hkps://keys.openpgp.org --search-keys <对方的邮箱或KeyID>
    • 更新密钥gpg --keyserver hkps://keys.openpgp.org --refresh-keys(获取已导入密钥的最新签名、吊销信息等)。
    • 验证上传:部分服务器(如keys.openpgp.org)需要额外邮件验证。你也可以通过gpg --export <你的KeyID> | curl -T - https://keys.openpgp.org快速生成验证链接。
    • 永久配置:在 ~/.gnupg/gpg.conf 文件中添加 keyserver hkps://keys.openpgp.org,就能省去每次输入 --keyserver 的步骤,让后续所有操作默认使用这台服务器。
  • :window: 图形化工具(如 Kleopatra)
    Kleopatra (Gpg4win 的一部分) 提供了更直观的图形界面。你可以在 “Settings → Configure Kleopatra → Directory Services” 菜单中,方便地配置和切换公钥服务器。

:warning: 注意事项与最佳实践

  • 安全与隐私风险:公钥服务器是公开的,一旦上传,任何人都可以下载,且信息(包括历史版本)理论上永远不会被删除。此外,因网络架构陈旧,可能成为拒绝服务攻击的目标,甚至存在包含虚假签名导致本地密钥环损坏的风险。
  • 伦理与法律风险:严禁上传他人的或冒用身份的密钥,这是一种侵权行为。同时,鉴于服务器仅提供“发布”而缺乏“验证”,不能因为服务器上有某个公钥就盲目信任其所有者。
  • :sparkles: 更好的选择:Web Key Directory (WKD)
    WKD 是一种更现代、更安全的技术。它允许邮箱服务商(或你自己)在邮件服务器上直接发布公钥,实现了公钥的自动发现。这种方式无需依赖全局公钥服务器,安全性和便捷性都更高。

公钥服务器是GPG生态中一个方便但并非万能的工具。了解它的运作方式、优缺点,并结合最佳实践来使用,才能让你的加密通信更安全、高效。