我托管了一个私有 Debian 存储库,用于存放一些自定义 Raspberry Pi 代码。我最初在 Raspbian Jessie(版本 8)上构建了该软件,生成了一个 GPG 密钥,用于对存储库进行签名,并sudo apt-key add ...
在所有设备上运行,以确保它们能够验证我的存储库。这一直运行良好,直到最近我添加了一些运行 Raspbian Stretch(版本 9)的新设备。尽管我为它们添加了完全相同的 GPG 密钥,但运行时我看到的输出如下sudo apt-get update
:
W: GPG error: http://url.of.private.repo stable Release: The following signatures were invalid: 95F9B44CE35F40B759D59C2A77E4184C595493B1
W: The repository 'http://url.of.private.repo stable Release' is not signed.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.
但是,这种情况只发生在较新的机器上。在仍然运行 Jessie 的 Pi 上,我可以运行sudo apt-get update
我想要的所有程序,它不会给我任何身份验证警告。
为什么运行 Stretch 的 Pis 认为 GPG 密钥无效,即使它们都共享同一个密钥?我可以在运行 Stretch 的盒子上生成一个新密钥,但我希望避免向每个 Jessie 盒子添加新的 GPG 密钥。(目前,我只有少数几个新盒子运行 Stretch,而大约 200 个盒子仍在运行 Jessie。)我该怎么做才能让 Stretch 盒子相信这个 GPG 密钥确实有效?
sudo apt-get -o Debug::Acquire::gpgv=true update
根据要求,以下是在两个平台上该命令的输出:
答案1
根据评论:
SHA1
被认为是弱的,因此 Debian 决定在2016 年 3 月。
因此,如果操作 APT 存储库:请弃用SHA1
并(至少)切换到SHA256
。
看这篇 Debian 维基文章有关推理的摘要和这个它跟踪损坏/修复的(上游)存储库。
答案2
这在 ask ubuntu 上回答为我修复了它:编辑~/gnupg/gpg.conf
并添加:
cert-digest-algo SHA256
digest-algo SHA256