1)我如何知道哪些服务器用于搜索密钥gpg
gpg --search-key <keyword>
2)如何将服务器添加到查询的服务器列表中?
答案1
“信誉良好的”密钥服务器与其他服务器交换密钥更新,因此使用一个服务器与使用另一个服务器相同(在某些情况下略有延迟)。过去,建议是使用 SKS 服务器池,最好使用安全连接;有关详细信息,请参阅上一个链接,或者这个答案。然而,该池已被禁用。
从 GPG 2.3.2 开始,默认使用 keyserver.ubuntu.com;要对旧版本执行此操作,请使用:
gpg --keyserver keyserver.ubuntu.com --search-key ...
如果您使用的是该版本或更高版本,并且尚未更改其默认配置,则无需手动指定密钥服务器即可。
如有必要,您可以通过添加相关选项来永久存储密钥服务器设置(如果守护进程已在运行,则~/.gnupg/dirmngr.conf
可能需要运行):gpgconf --reload dirmngr
dirmngr
keyserver hkps://keyserver.ubuntu.com
您可以keyserver
在该文件中指定多个选项,但我的印象是只考虑最后一个选项。
为了真正回答你最初的问题,至少 GPG 2.1 版本显示了用于查询的密钥服务器:
$ gpg --search-key A36B494F
gpg: data source: https://host-37-191-236-118.lynet.no:443
...
答案2
$ gpg -v --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
gpg: data source: https://162.213.33.8:443
gpg: armor header: Version: Hockeypuck ~unreleased
gpg: armor header: Comment: Hostname:
gpg: key 3804BB82D39DC0E3: number of dropped non-self-signatures: 108
gpg: pub rsa4096/3804BB82D39DC0E3 2014-10-28 Michal Papis (RVM signing) <[email protected]>
gpg: key 3804BB82D39DC0E3: "Michal Papis (RVM signing) <[email protected]>" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
“数据源”行告诉我们使用了哪个服务器。
这是在 Arch Linux 下运行的,由于某种原因(具体是哪个服务器回复?)它不会告诉域(在 Debian 下它会告诉域),但你可以这样做:
$ host 162.213.33.8
8.33.213.162.in-addr.arpa domain name pointer keyserver.ubuntu.com.
或者,您可以检查源代码。对于Arch Linux,它使用官方版本切换到 keyserver.ubuntu.com 中2.2.29
,和 2.3.2
。 Debian 正在使用keys.openpgp.org
自从 2.2.17
(据说还有一个未发布 分支为了2.2.12
)。
至于将密钥服务器添加到列表中,您可以使用$GNUPGHOME/dirmngr.conf
:
keyserver keys.openpgp.org
确保gpgconf --reload dirmngr
(或gpgconf --kill dirmngr
) 以使更改生效。
这两个似乎是推荐的密钥服务器。也可以看看这个答案。
我决定留下这部分,以防万一
一种找到它的方法strace
:
$ pkill dirmngr; strace -fs 1024 gpg --recv-keys 7D2BAF1CF37B13E2069D6956105BD0E739499BDB |& grep resolve_dns_addr
[pid 15102] write(2, "dirmngr[15101.5]: resolve_dns_addr for 'keys.openpgp.org': 'keys.openpgp.org' [already known]", 93) = 93
[pid 15102] write(2, "dirmngr[15101.5]: resolve_dns_addr for 'keys.openpgp.org': 'keys.openpgp.org' [already known]", 93) = 93
您需要dirmngr
先杀死它,因为它与密钥服务器交互,如果它已经在运行,您将无法检查它正在做什么。
-f
- 跟踪子进程,-s
- 要打印的最大字符串大小(默认值为 32)。
答案3
这将列出dirmngr
当前正在使用的所有密钥服务器,必要时启动它。
gpg-connect-agent --dirmngr 'keyserver' /bye