Kali Linux APT更新GPG签名错误及apt-key弃用解决方案

16 次阅读

Kali Linux作为安全测试领域广泛使用的Linux发行版,依赖APT包管理系统完成软件安装、系统升级以及安全工具维护。在执行apt update更新软件源时,部分用户会遇到GPG签名错误,例如“NO_PUBKEY”“The following signatures couldn't be verified”或“EXPKEYSIG”等提示。这类问题通常与软件源密钥失效、GPG密钥过期、密钥存储方式变化以及apt-key工具弃用有关。

随着Debian及Kali Linux安全机制不断完善,传统的apt-key管理方式已经被官方标记为废弃。新的推荐方式是使用独立密钥文件配合/etc/apt/keyrings/目录,通过Signed-By参数指定软件源验证密钥。掌握这种新的APT密钥管理方法,可以有效解决Kali更新失败问题,同时提升系统软件源安全性。

Kali Linux APT更新GPG签名错误的常见表现

执行系统更新命令:

Bash
sudo apt update

如果APT无法验证软件仓库签名,终端可能出现以下错误信息:

1. NO_PUBKEY错误

示例:

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

该错误表示系统缺少对应的软件源公钥,APT无法确认软件包来源是否可信。

2. EXPKEYSIG错误

示例:

EXPKEYSIG ABCD1234567890 Kali Linux Repository

表示软件仓库签名密钥已经过期,需要更新新的GPG密钥。

3. BADSIG错误

示例:

The following signatures were invalid: BADSIG

通常说明下载的软件索引文件签名验证失败,可能与缓存异常、镜像同步问题或者密钥变化有关。

4. apt-key相关警告

部分用户执行:

Bash
sudo apt-key add key.asc

可能看到:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead

这说明APT已经不推荐继续使用集中式密钥管理方式。


导致Kali Linux GPG签名错误的主要原因

软件源密钥更新导致旧密钥失效

Kali Linux的软件仓库会定期更新签名密钥。如果系统长期未升级,旧密钥可能已经过期,导致APT无法验证仓库。

例如:

  • Kali重新发布新的仓库签名密钥;

  • 系统仍保存旧GPG Key;

  • apt update验证失败。

系统安装时间过久

一些长期未更新的Kali系统,例如安装镜像较旧的虚拟机环境,可能包含过时的APT密钥。

使用第三方软件源

Kali默认软件源经过官方维护,但很多用户会额外添加:

  • Docker源;

  • Google Chrome源;

  • Node.js源;

  • 安全工具第三方仓库。

这些仓库拥有独立GPG密钥,密钥过期后会导致更新失败。

错误使用apt-key管理密钥

过去常见做法:

Bash
wget -qO - https://example.com/key.gpg | sudo apt-key add -

所有密钥都会加入APT全局可信数据库。

这种方式存在两个问题:

  1. 一个仓库密钥泄露可能影响整个APT信任链;

  2. 无法明确控制某个密钥只能用于某个软件源。

因此新版APT逐渐淘汰apt-key。


查看Kali Linux当前APT软件源配置

排查GPG错误之前,需要确认软件源是否正确。

查看主软件源:

Bash
cat /etc/apt/sources.list

正常Kali Rolling源通常类似:

deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware

如果配置错误,例如混用了Debian、Ubuntu或者旧版Kali源,也可能导致签名验证失败。

查看额外软件源:

Bash
ls /etc/apt/sources.list.d/

查看具体文件:

Bash
cat /etc/apt/sources.list.d/*.list

建议删除长期不用或者来源不明的软件仓库。


Kali Linux更新官方GPG密钥的方法

对于Kali官方仓库密钥问题,可以重新安装Kali Archive Keyring。

首先更新软件列表:

Bash
sudo apt update

如果因为密钥错误无法执行,可以重新下载官方密钥包。

安装最新密钥:

Bash
sudo apt install --reinstall kali-archive-keyring

完成后再次执行:

Bash
sudo apt update

如果更新成功,说明问题来自旧密钥。


解决NO_PUBKEY错误的方法

假设错误信息:

NO_PUBKEY 1234567890ABCDEF

表示缺少对应公钥。

推荐使用现代方式导入密钥,而不是apt-key。

创建密钥目录:

Bash
sudo mkdir -p /etc/apt/keyrings

下载并转换密钥:

Bash
curl -fsSL https://example.com/repository.gpg 
| sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

然后修改软件源:

Bash
sudo nano /etc/apt/sources.list.d/example.list

调整为:

deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com stable main

保存后执行:

Bash
sudo apt update

这样APT只会使用指定密钥验证对应仓库。


apt-key弃用后的正确替代方案

过去:

Bash
sudo apt-key add repository.key

现在推荐:

Bash
sudo gpg --dearmor repository.key 
-o /etc/apt/keyrings/repository.gpg

然后在APT源中添加:

signed-by=/etc/apt/keyrings/repository.gpg

完整流程如下:

第一步:创建keyrings目录

Bash
sudo mkdir -p /etc/apt/keyrings

第二步:导入GPG密钥

例如:

Bash
wget -qO- https://example.com/repo.key 
| gpg --dearmor 
| sudo tee /etc/apt/keyrings/repo.gpg >/dev/null

第三步:绑定软件源

配置:

deb [signed-by=/etc/apt/keyrings/repo.gpg] https://example.com/debian stable main

第四步:刷新APT缓存

Bash
sudo apt update

这种方式符合现代Debian系发行版规范,也是Kali Linux长期推荐的管理方式。


清理旧apt-key密钥的方法

如果系统中仍存在旧密钥,可以查看:

Bash
apt-key list

可能看到:

/etc/apt/trusted.gpg

中的历史密钥。

虽然apt-key已经废弃,但旧系统升级过程中可能仍保留这些文件。

查看传统密钥:

Bash
sudo gpg --list-keys --keyring /etc/apt/trusted.gpg

对于已经迁移到keyrings目录的密钥,可以删除旧版本:

Bash
sudo apt-key del KEY_ID

不过不建议在不了解用途时随意删除,因为可能导致其他软件源失效。


处理Kali APT缓存异常导致的签名错误

部分GPG错误并非密钥问题,而是APT缓存损坏。

可以清理缓存:

Bash
sudo apt clean

删除索引:

Bash
sudo rm -rf /var/lib/apt/lists/*

重新下载:

Bash
sudo apt update

如果使用代理服务器或者网络环境不稳定,也可能导致下载的Release文件损坏。


检查系统时间避免GPG验证失败

GPG签名验证依赖准确时间。

查看当前时间:

Bash
date

如果时间错误,例如虚拟机快慢数小时,可能出现:

Release file is not valid yet

开启时间同步:

Bash
sudo timedatectl set-ntp true

查看状态:

Bash
timedatectl status

Kali虚拟机环境中的特殊处理

很多用户通过VMware、VirtualBox运行Kali。如果快照恢复时间较旧,可能出现:

  • 系统时间异常;

  • 密钥过期;

  • 软件索引过旧。

建议恢复快照后立即执行:

Bash
sudo apt update
sudo apt full-upgrade -y

保持系统组件和密钥同步。


避免Kali APT GPG错误的最佳实践

定期更新系统

建议保持Kali Rolling更新:

Bash
sudo apt update
sudo apt full-upgrade -y

使用官方软件源

避免随意添加未经验证的软件仓库。

使用keyrings管理第三方密钥

推荐结构:

/etc/apt/keyrings/
├── docker.gpg
├── google.gpg
└── custom-repo.gpg

每个软件源使用独立密钥,提高安全性。

不再使用apt-key

新安装软件时,应优先查看官方文档是否提供:

  • .gpg密钥文件;

  • signed-by配置;

  • keyrings安装方式。


常见问题解答

Kali执行apt update提示NO_PUBKEY怎么办?

首先确认缺失的KEY属于哪个软件源,然后使用gpg --dearmor方式导入密钥,并通过signed-by绑定仓库。

apt-key还能继续使用吗?

部分旧系统仍然支持,但该命令已经被标记为废弃。长期维护的Kali系统建议迁移到/etc/apt/keyrings/方式。

删除所有APT密钥是否可以解决问题?

不建议。APT密钥用于验证软件来源,随意删除可能导致官方仓库和第三方软件源全部失效。

Kali官方源需要手动添加GPG密钥吗?

正常情况下不需要。官方提供的kali-archive-keyring包会负责管理仓库签名密钥。


Kali Linux APT更新出现GPG签名错误,本质上是软件源身份验证流程出现问题。面对NO_PUBKEY、EXPKEYSIG以及apt-key弃用警告时,应优先检查软件源配置、更新官方keyring,并采用现代/etc/apt/keyrings + signed-by方案管理密钥。相比传统全局信任方式,新方法更加安全、清晰,也符合当前Debian系Linux发行版的发展方向。