如何使用 GPG 或 PGP 导入公钥

要开始使用 GPG 导入公钥,你可以使用如下简单的命令:
gpg --import publickey.asc
你可能出于各种原因需要导入公钥:
- 你想要验证软件,例如在安装使用 PGP 签名的工具时。
- 你与其他用户交换密钥以发送加密消息。
- 你迁移旧的 PGP 密钥或转向使用 GnuPG。
- 你从服务器获取密钥以验证消息或软件的真实性。
有时,你甚至需要从旧版本的 PGP 中导入公钥,这可能需要一些特殊步骤。
关键要点
- 你可以使用 GPG 或 PGP 添加公钥。你可以通过文件、URL、文本或密钥服务器导入。命令非常简单易用。——始终检查公钥的真实性。在信任或使用之前查看其指纹。——为你的密钥文件使用清晰的名称。这有助于你保持条理,避免混淆。——为添加的密钥设置信任级别。这使你可以选择对密钥所有者的信任程度,并保护你的消息安全。——如果你遇到重复密钥或导入问题等错误,请检查你的密钥圈。如有需要,更新你的软件或尝试其他服务器。
如何从文件导入公钥

当你想要了解如何从文件导入公钥时,通常会从你下载或从可信人那里收到的文件开始。这是将公钥添加到你的密钥圈的最常见方式之一,无论你使用 GPG 还是 PGP 都可以使用这种方法。你可以将此方法用于 PGP 和 GnuPG 工具。
GPG 命令
你可以通过几个简单的步骤使用 GPG 从文件导入公钥。GPG 代表 GNU 隐私卫士,是一种流行的加密和签名工具。
- 将公钥文件保存到你的计算机上。你可能会看到类似
publickey.asc或publickey.gpg的文件名。.asc扩展名表示文件是文本格式,而.gpg是二进制格式。这两种格式都可以用于导入。 - 打开你的终端或命令提示符。
- 运行以下命令以导入密钥:
gpg --import publickey.asc
你也可以使用:
gpg --import publickey.gpg
如果你愿意,你可以将文件内容通过管道传输到 GPG:
gpg --import < publickey.gpg
- 如果你的密钥文件位于不同的文件夹中,你需要指定完整路径。例如:
gpg --import /home/yourname/keys/brucewayne-public.asc
- 运行命令后,GPG 将添加文件中找到的所有密钥。如果文件包含公钥和私钥,GPG 将同时导入两者。
提示:使用清晰的文件名,如
alice-public.asc或bob-private.asc,以避免混淆。你可以使用任何名称,但良好的命名有助于你保持条理。
常见文件格式
.asc用于 ASCII 装甲(文本)密钥。这些密钥易于阅读和分享。.gpg用于二进制密钥。这些密钥不可读,但功能相同。
你可以选择任何文件名或路径。文件名不会改变密钥本身。许多人会在文件名中使用密钥所有者的姓名、电子邮件或密钥 ID,以便于识别。
安全提示
从文件导入公钥时,始终检查密钥的真实性。如果有人在你收到文件之前篡改了它,你可能会导入一个假密钥。这种风险与其他方法类似,因此始终尽可能与所有者验证密钥的指纹。
PGP 命令
PGP(代表“非常可靠的隐私”)的工作方式类似。如果你使用经典的 PGP 命令行工具,你可以使用如下命令导入公钥文件:
pgp -ka publickey.asc
-ka选项表示“添加密钥”。如果文件不在当前目录中,你也可以使用文件的完整路径。- PGP 将导入文件中的所有密钥,包括公钥和私钥(如果存在)。
注意:某些版本的 PGP 可能使用不同的命令或选项。如果你遇到错误,请始终查看你版本的文档。
文件命名最佳实践
- 使用有助于你记住密钥所有者的名称。
- 在文件名中添加
-public或-private以避免错误。 - 使用
.asc用于文本密钥,.gpg用于二进制密钥。
故障排除
有时,如果你尝试导入已经存在于你的密钥圈中的密钥,可能会出现错误。某些软件(如 OSX Keychain)可能会拒绝导入重复的密钥。如果发生这种情况,请检查密钥是否已经存在,或者尝试使用命令行以获得更多的控制权。
记住:了解如何从文件导入公钥是使用 GnuPG 或 PGP 的基本技能。你可以使用这些步骤从任何可信来源导入 PGP 公钥文件。
从 URL 或文本导入 PGP 公钥
有时,你的计算机上没有密钥文件。你可能会在网站上找到一个公钥,或者以文本块的形式收到它。你可以使用 GPG 或 GnuPG 将 PGP 公钥导入你的密钥圈。此方法可以帮助你在不知道如何从网页或直接链接导入公钥时使用。
使用 URL 与 GPG
你可以使用 GPG 直接从 URL 导入公钥。这可以节省你的时间,因为你无需先下载文件。以下是一些方法:
- 使用 curl 获取密钥并将其通过管道传输到 gpg –import:
curl http://example.com/pgp-public-key | gpg --import
- 使用进程替换导入密钥而不保存它:
gpg --import <(curl http://example.com/pgp-public-key)
- 如果你知道密钥 ID,你可以从密钥服务器获取它:
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&options=mr&search=0xYOURKEYID" | gpg --import -
-fsSL 选项使 curl 保持安静,跟随重定向,并在出现问题时显示错误。
提示:在导入密钥之前,始终检查 URL 的来源。仅使用可信的网站或密钥服务器。
从剪贴板或文本块导入
你可能会从电子邮件或网站中复制一个公钥块。你可以使用 gpg –import 将其添加到你的密钥圈。以下是操作方法:
- 复制整个公钥块,包括
-----BEGIN PGP PUBLIC KEY BLOCK-----和-----END PGP PUBLIC KEY BLOCK-----这两行。 - 打开你的终端。
- 输入:
gpg --import
- 将密钥块粘贴到终端中。
- 按
Ctrl+D完成导入。
如果你不想将密钥保存为文件,或者在不同计算机上使用 GnuPG 时,此方法效果很好。
注意:你可以使用 PGP 的图形界面工具,但命令行提供了更多的控制权,并且可以在大多数系统上使用。
从密钥服务器导入
你可以使用密钥服务器查找并添加公钥到你的密钥圈。如果你知道密钥 ID 或电子邮件地址但没有密钥文件,此方法效果很好。许多人使用密钥服务器与他人共享他们的公钥。
GPG –recv-keys
你可以使用 gpg --recv-keys 命令从密钥服务器获取公钥。以下是操作方法:
- 找到你想要的公钥的密钥 ID 或电子邮件地址。
- 打开你的终端。
- 输入命令:
gpg --recv-keys <keyid>
- GPG 将连接到默认的密钥服务器并将密钥添加到你的密钥圈。
你也可以通过电子邮件地址搜索密钥。某些工具允许你搜索、查看列表并导入一个或多个密钥。只有公钥可以这样添加。
提示:如果你使用 GnuPG,你可以使用相同的命令。大多数系统的操作过程相同。
指定密钥服务器
你可能希望选择一个特定的密钥服务器。某些密钥服务器更可靠或速度更快。最广泛使用的密钥服务器包括 keyserver.ubuntu.com、keys.openpgp.org 和 pgp.mit.edu。你可以在命令中设置密钥服务器,如下所示:
gpg --keyserver keyserver.ubuntu.com --recv-keys <keyid>
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 94532124541922FB这个命令展示了在导入密钥时如何设置自定义密钥服务器。--keyserver选项允许你选择你信任的服务器。
密钥服务器可以帮助你找到公钥,但它们不能保证密钥的真实性。任何人都可以上传密钥。你应该始终与所有者验证密钥的指纹,或使用信任网络。这一步可以保护你的通信安全。
- 密钥服务器不能防止篡改或攻击。
- 在信任密钥之前,始终验证密钥的指纹。
注意:密钥服务器上的公钥可以通过电子邮件搜索。这可能会使电子邮件地址暴露给垃圾邮件发送者。只有在你能够接受这种风险的情况下,才共享你的公钥。
你可以使用 gpg –import 从文件中添加密钥,但密钥服务器允许你从世界各地获取密钥。这使得共享和查找密钥变得更加容易。
验证和信任导入的密钥

导入公钥后,你需要确保它既有效又可信。这一步可以帮助你避免安全风险,并确保你的加密消息或软件签名是安全的。
列出密钥
你可以通过列出密钥来检查你已经导入了哪些密钥。这有助于你跟踪你的密钥圈并发现任何未知的密钥。
- 要在 GPG 中列出你的密钥,请使用:
gpg --list-keys
- 如果你想查看特定文件中的密钥,请尝试:
gpg --show-keys <keyfile>
- 对于 PGP 命令行,使用:
pgp --list-keys查看所有密钥。pgp --list-secret-keys查看私钥。
某些工具(如 Apptainer)使用类似的命令:
apptainer key list显示你的公钥。apptainer key list --secret列出你的私钥。
提示:定期检查你的密钥圈,以确保你只保留可信的密钥。
设置信任级别
设置信任级别可以告诉你的系统你对密钥所有者签署其他密钥的信任程度。这对于建立一个安全的可信联系人网络非常重要。
以下是你可以设置的主要信任级别:
| 信任级别 | 描述 |
| Ultimate | 仅用于你自己的密钥。 |
| Full | 你完全信任此密钥签署他人。 |
| Marginal | 你对这个密钥有一定程度的信任。 |
| Never | 你完全不信任这个密钥。 |
| Unknown | 你尚未设置信任级别。 |
要在 GPG 中设置信任级别,请按照以下步骤操作:
- 打开密钥进行编辑:
gpg --edit-key <keyid>
- 输入
trust并按回车键。 - 选择一个数字作为信任级别:
- 1: 我不知道
- 2: 我不信任
- 3: 我有点信任
- 4: 我完全信任
- 5: 我绝对信任
注意:仅将“绝对信任”设置为你自己的密钥。对于其他人,在验证密钥后使用“完全信任”或“有点信任”。
为何验证如此重要
你必须始终验证公钥是否真正属于其声称代表的个人或团体。如果你跳过这一步,有人可能会用假密钥欺骗你。你可以通过与所有者核对密钥的指纹、使用可信网站或亲自见面来验证密钥。这可以保护你免受攻击,并确保你的通信安全。
故障排除
在处理公钥时,你可能会遇到一些常见问题。以下是解决这些问题的方法。
密钥重复错误
如果你尝试添加已经存在于你的密钥圈中的密钥,可能会出现密钥重复错误。当你从不同来源导入密钥或重复相同的操作时,这种情况经常发生。
- 在开始之前检查重复项。你可以列出你的密钥并查看密钥是否已经存在。
- 如果你使用像 phpMyAdmin 这样的工具进行数据库导入,你可以更改设置以忽略重复错误。例如,启用“忽略多语句错误”或为 CSV 文件选择“不在 INSERT 错误时中止”。
- 某些系统允许你使用生成的 ID 或更改主键以避免冲突。
提示:在导入之前移除或重命名重复的密钥可以节省你的时间并避免错误。
导入失败
有时,导入 PGP 2.x 密钥或其他密钥可能会失败。你可能会看到“没有有效的用户 ID”或“无效的自签名”等错误。这些问题通常是因为密钥没有自签名用户 ID 或使用了不支持的算法。
- 如果你看到“没有有效的用户 ID”,请尝试在 gpg 中使用
--allow-non-selfsigned-uid选项。 - 使用较新版本的 gpg 创建的密钥可能无法在旧版本上使用。例如,具有 ECC 或大 DSA 大小的密钥可能在旧系统上失败。
- 确保你的密钥有自签名。此签名将用户 ID 与密钥关联起来。如果没有它,gpg 将不会使用该密钥。
- 如果遇到问题,请尝试从 ECC 切换到 RSA 密钥,或更新你的 gpg 软件。
如果你导入了一个私钥,你无需单独导入公钥。该过程会将两者都添加到你的密钥圈中。
连接问题
当你从密钥服务器获取密钥时,可能会遇到网络问题。
- 尝试使用端口 80 或 HKPS 上的端口 443 来绕过防火墙。
- 如果某个密钥服务器没有响应,切换到另一个密钥服务器,如 keyserver.ubuntu.com 或 pgp.mit.edu。
- 如果无法连接,请下载公钥文件并本地导入。
- 为了避免重复这些步骤,请在
dirmngr.conf文件中设置你的默认密钥服务器并重新加载 dirmngr。
使用不同的端口或服务器通常可以解决大多数连接问题。
现在,你已经了解了使用 GPG 或 PGP 导入公钥的不同方法。你可以从文件、URL 或密钥服务器导入。始终检查并为每个添加的密钥设置信任。经常更新信任设置,特别是当你添加或更改密钥时。良好的密钥管理有助于保护你的数据安全。
| 密钥管理方面 | 最佳实践描述 |
| 备份与恢复密钥 | 将密钥备份存储在安全的地方。 |
| 吊销证书 | 创建吊销证书,以防你丢失密钥。 |
| 信任级别管理 | 设置信任级别以避免警告并确保密钥正确检查。 |
如果你想了解更多信息,请研究如何创建强大的密钥、处理子密钥以及使用吊销证书。
常见问题解答
如何查找已导入密钥的指纹?
你可以运行以下命令:
gpg --fingerprint <keyid>
这将显示指纹。在信任密钥之前,始终与密钥所有者核对指纹。
是否可以使用相同的命令导入公钥和私钥?
可以。当你使用 gpg --import keyfile.asc 时,GPG 会导入文件中的所有密钥。你应该将私钥保存在安全的地方,切勿共享。
如果遇到“没有有效的用户 ID”错误,我该怎么办?
此错误意味着密钥没有用户 ID 或自签名。尝试更新你的 GPG 软件,或要求密钥所有者提供新密钥。
从任何密钥服务器获取公钥是否安全?
不,不一定。任何人都可以将密钥上传到密钥服务器。在信任或使用密钥之前,你应该始终与密钥所有者验证密钥的指纹。