避免”gpg –recv-key”带来的不稳定性

325次阅读
没有评论

问题描述

在使用gpg验证下载文件的签名时,需要先导入密钥。然而,这个操作在实际中非常慢且不稳定。
例如,用户尝试了以下操作:

$ gpg --keyserver pgpkeys.mit.edu --recv-key A0E98066
gpg: keyserver receive failed: No data
$ gpg --keyserver pgpkeys.mit.edu --recv-key A0E98066
gpg: key B550E09EA0E98066: public key "Yichun Zhang (agentzh) <agentzh@gmail.com>" imported
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:  14  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 14u
gpg: next trustdb check due at 2019-01-13
gpg: Total number processed: 1
gpg:               imported: 1

第一次运行失败,重试后花费了很长时间但最终成功。特别是在CI环境中,这种情况经常发生,因此用户正在寻找替代方案。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

首先,你可以下载密钥并保存为文件,然后在不访问密钥服务器的情况下导入密钥。
以下是具体步骤:
1. 下载密钥:

gpg --keyserver pgpkeys.mit.edu --recv-key A0E98066
gpg --export A0E98066 > openresty-agentzh-A0E98066.gpg
  1. 导入密钥:
gpg --import openresty-agentzh-A0E98066.gpg

这样,你就可以在不访问密钥服务器的情况下导入密钥了。

方案2

另一种选择是,如果你信任你的仓库或软件源,可以禁用gpg密钥检查。这在连接到通过SSL连接的仓库时特别可行,因为你可以验证你正在拉取正确的源,并且没有中间人攻击。但这样做会失去对每个单独软件包完整性的验证(如果仓库被黑客攻击并插入了恶意软件包或软件包被篡改)。要禁用gpg密钥检查,请在你的仓库文件中设置:

gpgcheck=0

请注意,禁用gpg密钥检查会降低软件包的安全性,请确保你信任你的仓库或软件源。

方案3

如果你需要自动化这个过程,你可以编写一个脚本来定期检查导出的密钥是否仍然是最新的,并在不是最新的情况下发出警报。这样可以确保你始终使用最新的密钥进行验证。

以上是几种避免”gpg –recv-key”带来的不稳定性的解决方案。根据你的具体需求选择合适的方案。

正文完