通过

sudo apt-get update
在基于debian的系统上更新我的软件包时,我得到了该错误消息:

Reading package lists... Done
W: GPG error: ftp://ftp.fr.debian.org stable/non-US Release: 
The following signatures were invalid: KEYEXPIRED 1138684904


该如何解决?

#1 楼

要查找任何过期的存储库密钥及其ID,请按以下方式使用apt-key

LANG=C apt-key list | grep expired


您将得到与以下内容类似的结果:

pub   4096R/BE1DB1F1 2011-03-29 [expired: 2014-03-28]


密钥ID是/后面的位,在这种情况下即BE1DB1F1

要更新密钥,请运行

sudo apt-key adv --recv-keys --keyserver keys.gnupg.net BE1DB1F1


注意:如果软件包维护者尚未上传新密钥,则更新密钥显然将不起作用。在这种情况下,除了联系维护人员,针对您的发行版提交错误外,您几乎无能为力。

一个班轮可以更新所有过期的密钥:(感谢@ryanpcmcquen)

for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; done


评论


这对我不起作用,在更新密钥的命令之后,密钥仍然过期。

–卡尔·福纳(Karl Forner)
2014年11月6日12:20



@KarlForner添加密钥成功了吗?

– kynan
2014年11月7日10:18

是的,它成功了。

–卡尔·福纳(Karl Forner)
2014年11月7日14:08

一个衬里:对于$(apt键列表| grep已过期| cut -d'/'-f2 | cut -d''-f1)中的K;做sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $ K;完成

–ryanpcmcquen
16 Dec 11'在0:47

只是关于grep部分的提示:“ expired”是i18ned,因此根据LANG *设置可能不起作用,例如对于设置pl_PL.UTF-8,必须将“ expired”更改为“wygasł”,以使其成为一个-班轮工作。

– Cromax
17年4月25日在16:30

#2 楼

您需要获取新密钥并添加它,这时apt将检测到它并且不会抱怨。这通常不应该发生,但有时会发生。您真正需要的是知道您需要添加的密钥的十六进制代码。一旦有了它,就从那里走下坡路了。

一些示例:


添加反向移植密钥:前几行就是,尽管您需要拥有它想要的密钥。
在Ubuntu中添加密钥


#3 楼

在有关SecureAPT的Debian Wiki上,我发现我应该从/etc/apt/sources.list中删除包含non-us的行。

我确实做到了,并且奏效了。

评论


这可能在特定情况下可行,但不是通用解决方案

– kynan
2015年11月4日在20:52

#4 楼

我有类似的错误,但是问题出在系统时间上。那是1961年:)

我更正了系统日期/时间,此后无需专业人士即可进行更新

#5 楼

如果日期不正确,也可能会发生这种情况。

使用

检查日期。
date


如果配置错误,请执行以下操作来设置您的日期时区和日期自动同步。

apt-get install ntp ntpdate && service ntp stop
dpkg-reconfigure tzdata
ntpdate-debian
service ntp start


#6 楼

一个更简单的oneliner:

for key in $(sudo apt-key list | awk -v FS='[ /:]+' '/expire[sd]/ {print }'); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $key; done

我只是觉得,如果您多次使用cut之类的东西,那么会有更好的工具。 (此外,我是根据其他问题创建的。)

#7 楼

造成此错误的可能性极小,但偶尔也可能是,如果两次添加相同的密钥且具有不同的到期日期,则会导致该错误。您可能会知道这样做使该答案与您相关。
当使用自己的密钥托管自己的存储库时,可能会像我这样发生。如果您在密钥即将到期时,只需延长其寿命而不是更改它,并且如果您使用预播安装了原始密钥,而使用deb软件包安装了更新的密钥,则旧密钥将位于/etc/apt/trusted.gpg中,而新密钥将位于/etc/apt/trusted.gpg.d/中一个最终在apt-key下作为一个单独的文件结束。旧密钥将遮盖新密钥,而gpg --keyring /etc/apt/trusted.gpg --delete-keys <keyid>将完全忽略该密钥。通过运行q4312079q删除旧密钥,您的新密钥将被检测到。
这是一个非标准的转角配置,但是我希望我的回答可以避免造成一些混乱,以防其他人由于以下原因遇到此问题和我一样。

#8 楼

您无需做任何事情。只是警告,您可以从W:前缀中看到它。

评论


如果他不需要做任何事情,那么整个Repos的Signing系统将毫无用处。这是一项安全功能,在生产环境中,密钥完整性对于安全性至关重要。

– Broco
18 Mar 15'在17:41