GPG错误:发行版:以下签名无效:BADSIG

我在终端中运行了这个命令:
sudo apt-get update

更新结束,以下是错误报告:
W: A error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://extras.ubuntu.com precise Release: The following signatures were invalid: BADSIG 16126D3A3E5C1192 Ubuntu Extras Archive Automatic Signing Key <ftpmaster@ubuntu.com>

W: GPG error: http://ppa.launchpad.net precise Release: The following signatures were invalid: BADSIG 4C1CBC1B69B0E2F4 Launchpad PPA for Jonathan French
W: Failed to fetch http://extras.ubuntu.com/ubuntu/dists/precise/Release  

这是什么意思,为什么会发生这种情况?

4我在第一次安装12.04时遇到了类似的问题。之后,我从软件管理器中将“软件源”从印度更改为另一个服务器。现在我没有看到这个问题了。如果你正在使用印度服务器,请将其更改并告诉我们。 - Abhijeet
谢谢,Abhijeet。我是印度人,但现在住在卡塔尔。我将服务器更改为沙特阿拉伯,但结果相同。 - beeju
对于我自己来说,在/etc/apt/sources.list.d/中有一个已经不存在的PPA,所以出现了这个错误。我不得不删除它(实际上,用我需要的ffmpeg的更新仓库替换它),然后sudo apt-get update就正常工作了。 - Joshua Pinter
1因为声誉不高,我只能评论。我使用以下命令解决了这个问题:apt-key adv --fetch-keys 'https://packages.sury.org/php/apt.gpg' > /dev/null 2>&1 来源:https://forum.hestiacp.com/t/apt-upgrade-failed-gpg-error-packages-sury-org/1920/8 - Ladislav Ondris
9个回答

这条消息显示是因为您的apt-key数据库中缺少该存储库的gpg密钥。
要导入密钥,请打开终端并输入以下命令。
gpg --keyserver keyserver.ubuntu.com --recv-keys 16126D3A3E5C1192 
pgp密钥通常分布在几个密钥库中。与Ubuntu相关的密钥通常可以在keyserver.ubuntu.com找到。但如果失败了,你可以使用其他替代方法。比如 -
gpg --keyserver hkp://subkeys.pgp.net --recv-keys 16126D3A3E5C1192

你必须用特定的密钥替换字母数字部分。确保这个密钥是你信任的。任何拥有这个密钥的仓库都可以在没有警告的情况下安装任何软件包。
如果上述操作成功,你将看到以下输出。
gpg: Total number processed: 1
gpg:               imported: 1

然后运行这个命令:
gpg --export --armor 16126D3A3E5C1192 | sudo apt-key add - 

请注意在add之后的-符号。
然后运行sudo apt-get update,此后您将不再收到这样的消息。

3嗨@anwar,我在哪里/怎么样才能获得我信任的密钥? - soMuchToLearnAndShare
3@MinnieShi 错误信息本身包含了关键信息 “以下签名无效:BADSIG 16126D3A3E5C1192” - Kalyan Raghu
3请注意,apt-key add 命令应该返回 "OK"。 - COil
1太棒了,应该是被接受的答案!谢谢。 - Jacob
我在执行 gpg --export 后得到了这个结果,但是在使用 apt 时仍然失败了,请问有什么建议吗?:gpg: 警告:'/home/abc/.gnupg' 目录的所有权不安全;OK - alchemy
密钥服务器目前为hkp://keyserver.ubuntu.com。 - bob

我在一个旧的Ubuntu 16.04系统上遇到了这个问题。我的密钥没有过期,所以我不确定为什么会出现错误。我尝试了SirCharlo的方法,但仍然遇到了相同的错误。由于这个特定的错误来自于“Ubuntu Extras Archive Automatic Signing Key”,我决定刷新我的密钥。在这样做之后,一切都正常工作了。不确定是两种方法的组合还是什么,但如果SirCharlo的方法不起作用,可以运行以下命令:
apt-key adv --refresh-keys --keyserver keyserver.ubuntu.com

这个完美地运作并且看起来很安全。谢谢。 - Dan Ortega
4这应该是被选中的答案! - Roger
1这对我有用,而其他答案都没有用。在Docker中使用Ubuntu16.04 Xenial。 - Yonatan Simson
2同意。这样执行起来感觉好多了(而且还有效),谢谢你。 - mgarde

你可以尝试使用我的脚本自动获取你所使用的PPA的所有GPG密钥:smartupdate.sh
它会执行apt-get update命令,然后查找所有的GPG错误并获取找到的GPG签名的密钥。在你的情况下,它只会执行以下操作:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4C1CBC1B69B0E2F4

但是当你添加一些未签名的PPA时,手动添加GPG密钥变得很无聊。 :)

除了这个以外,其他的答案对我来说都不适用。 - Muhammad Dyas Yaskur
这里有一个关于过期密钥解决方案的讨论,非常有价值。 - FugueWeb

131评论中建议的那样,按照已删除回答中所述的方法进行:

  1. 首先清理一下:

    sudo apt-get clean
    
  2. 可选步骤,用于备份并保留“lists”的所有权:

    sudo cp -a /var/lib/apt/lists /tmp
    sudo rm -r /var/lib/apt/lists/*
    
  3. 然后重新构建软件包列表:

    sudo apt update
    

注意

以下是在一个高赞的回答,现已删除中提出的建议:

sudo apt-get clean
sudo mv /var/lib/apt/lists /tmp
sudo mkdir -p /var/lib/apt/lists/partial
sudo apt-get clean
sudo apt-get update

这不是一个好建议,因为这里的mvmkdir会引发新的问题: lists不再属于_apt。这意味着您现在会看到这个新的apt警告:
W: Download is performed unsandboxed...

你需要保留lists文件夹的现有所有权和权限。

在尝试运行任何进一步的命令(如apt update)之前,你最好先释放一些Ubuntu上的空间。 - Junior Mayhé

我遇到了类似的错误。但是与 BADSIG 不同,我在 PostgreSQL 仓库中得到了 KEYEXPIRED 的错误:
W: A error occurred during the signature verification.
  The repository is not updated and the previous index files will be used.
  GPG error: http://apt.postgresql.org precise-pgdg Release:
  The following signatures were invalid: KEYEXPIRED 1381654177

解决方案在这里描述得非常完美,但这是我解决它的方法:
$ sudo apt-key list | grep -B1 PostgreSQL
$ sudo apt-key del ACCC4CF8
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

现在$ sudo apt-get update将完美运行!

我遇到了一个非常相似的错误(在Debian 10上):
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. 
GPG error: http://repo.mysql.com/apt/debian buster InRelease: The following signatures couldn't be verified because the public key is not available: 
NO_PUBKEY 467B942D3A79BD29

W: Failed to fetch http://repo.mysql.com/apt/debian/dists/buster/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29

The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29

你可以添加不可用的密钥然后再试一次。在我的情况下,不可用的密钥是467B942D3A79BD29
所以,添加密钥的命令将是sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
这解决了我的问题,sudo apt update顺利执行。
解决方案来源:https://docs.mideye.se/5.6.6/installation/debian10/

这对我来说完美地起作用了。谢谢。 - Promise Preston

这个小建议(来自actionparsnip)对我很有用:

Try:

sudo fuser -vvv /var/lib/dpkg/lock
sudo rm /var/lib/apt/lists/lock
sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available
sudo rm -rf /var/lib/dpkg/updates/*
sudo rm -rf /var/lib/apt/lists
sudo rm /var/cache/apt/*.bin
sudo mkdir /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists/partial
LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get update -o APT::Cache-Limit=25165824
sudo dpkg --clear-avail
sudo dpkg --configure -a
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get update -o APT::Cache-Limit=25165824 && sudo apt-get dist-upgrade
在以下位置找到:
https://answers.launchpad.net/ubuntu/+source/update-manager/+question/194077

这可能是由于HTTP代理的缓存问题。如果你在路由中有一个像我一样的代理,你可以运行apt 来临时绕过缓存。
sudo apt-get update -o Acquire::http::No-Cache=True

你可以使用launchpad-getkeys来解决这个问题。 打开终端并输入:
sudo apt-get install launchpad-getkeys
sudo launchpad-getkeys

那么

sudo apt-get update