无法分发永不过期的 GPG 公钥,因为它已过期

Mat*_*att 2 certificate gnupg openpgp

我之前已经成功分发了公钥(用于签署开源),但几个月后返回开源项目后,构建一直无法找到公钥。

当尝试重新分发密钥时我得到

gpg --keyserver keys.openpgp.org --send-key XXX
gpg: sending key XXX to hkp://keys.openpgp.org
gpg: keyserver send failed: Certificate expired
gpg: keyserver send failed: Certificate expired

Run Code Online (Sandbox Code Playgroud)

但是,证书设置为永不过期。

> gpg --edit-key  XXX
sec  rsa3072/XXX
     created: ...  expires: never       usage: SC  
     trust: ultimate      validity: ultimate
ssb  rsa3072/YYY
     created: ...  expires: never       usage: E   
Run Code Online (Sandbox Code Playgroud)

当证书设置为永不过期时,为什么它声称证书已过期,以及如何更新公钥以便可以再次使用?

谢谢。

use*_*686 5

它谈论的是密钥服务器的证书,而不是您尝试上传的证书。(GnuPG 本身几乎从不将 PGP 密钥称为“证书”,它通常专门为密钥签名(也称为认证)保留该名称,而不是为整个密钥块。)

\n

虽然keys.openpgp.org接受明文 HKP 请求(端口:11371 上的 HTTP),但它只会将它们重定向到 HKPS(即常用端口:443 上的 HTTPS)。

\n
$ curl -i http://keys.openpgp.org:11371\nHTTP/1.1 301 Moved Permanently\nLocation: https://keys.openpgp.org/\n
Run Code Online (Sandbox Code Playgroud)\n

一种可能是您的系统时钟错误,而且时间太早,以至于它认为已经过了 12 月。另一种可能性是它是过时的 TLS 客户端,无法正确验证证书。

\n

在 HTTPS 服务上,keys.openpgp.org 使用 Let\'s Encrypt 证书,并包含由 IdenTrust (DST Root CA X3) 交叉签名的证书链。这与9 月底到期的“DST Root CA X3”相同。

\n

如果您的操作系统仅安装了 IdenTrust“DST Root”CA,但未安装 Let\'s Encrypt“ISRG Root”CA – 或者如果它两者都有,但您的 GnuPG 版本链接到不支持备用验证链 \xe2\x80\x93 的 TLS 库,那么它将拒绝服务器的 TLS 证书作为“过期”,因为其根 CA 是已到期。旧版本的 GnuTLS 和 OpenSSL没有意识到这不是唯一的选择。

\n

例如,在 Debian oldstable(其中 gpg 使用 GnuTLS 库)中,您需要进行libgnutls30 (3.5.8-5+deb9u5 => 3.5.8-5+deb9u6)软件包升级并终止任何正在运行的“dirmngr”进程,以便它能够理解多个 TLS 验证链。在 Ubuntu 14.04 中,您需要彻底删除 DST CA。

\n

(Let\'s Encrypt 仍然将其作为主链的原因是因为它恰好提供了与真正旧的 Android 版本更好的兼容性。)

\n