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签名错误的常见表现
执行系统更新命令:
Bashsudo 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相关警告
部分用户执行:
Bashsudo 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管理密钥
过去常见做法:
Bashwget -qO - https://example.com/key.gpg | sudo apt-key add -
所有密钥都会加入APT全局可信数据库。
这种方式存在两个问题:
-
一个仓库密钥泄露可能影响整个APT信任链;
-
无法明确控制某个密钥只能用于某个软件源。
因此新版APT逐渐淘汰apt-key。
查看Kali Linux当前APT软件源配置
排查GPG错误之前,需要确认软件源是否正确。
查看主软件源:
Bashcat /etc/apt/sources.list
正常Kali Rolling源通常类似:
deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware
如果配置错误,例如混用了Debian、Ubuntu或者旧版Kali源,也可能导致签名验证失败。
查看额外软件源:
Bashls /etc/apt/sources.list.d/
查看具体文件:
Bashcat /etc/apt/sources.list.d/*.list
建议删除长期不用或者来源不明的软件仓库。
Kali Linux更新官方GPG密钥的方法
对于Kali官方仓库密钥问题,可以重新安装Kali Archive Keyring。
首先更新软件列表:
Bashsudo apt update
如果因为密钥错误无法执行,可以重新下载官方密钥包。
安装最新密钥:
Bashsudo apt install --reinstall kali-archive-keyring
完成后再次执行:
Bashsudo apt update
如果更新成功,说明问题来自旧密钥。
解决NO_PUBKEY错误的方法
假设错误信息:
NO_PUBKEY 1234567890ABCDEF
表示缺少对应公钥。
推荐使用现代方式导入密钥,而不是apt-key。
创建密钥目录:
Bashsudo mkdir -p /etc/apt/keyrings
下载并转换密钥:
Bashcurl -fsSL https://example.com/repository.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg
然后修改软件源:
Bashsudo nano /etc/apt/sources.list.d/example.list
调整为:
deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com stable main
保存后执行:
Bashsudo apt update
这样APT只会使用指定密钥验证对应仓库。
apt-key弃用后的正确替代方案
过去:
Bashsudo apt-key add repository.key
现在推荐:
Bashsudo gpg --dearmor repository.key -o /etc/apt/keyrings/repository.gpg
然后在APT源中添加:
signed-by=/etc/apt/keyrings/repository.gpg
完整流程如下:
第一步:创建keyrings目录
Bashsudo mkdir -p /etc/apt/keyrings
第二步:导入GPG密钥
例如:
Bashwget -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缓存
Bashsudo apt update
这种方式符合现代Debian系发行版规范,也是Kali Linux长期推荐的管理方式。
清理旧apt-key密钥的方法
如果系统中仍存在旧密钥,可以查看:
Bashapt-key list
可能看到:
/etc/apt/trusted.gpg
中的历史密钥。
虽然apt-key已经废弃,但旧系统升级过程中可能仍保留这些文件。
查看传统密钥:
Bashsudo gpg --list-keys --keyring /etc/apt/trusted.gpg
对于已经迁移到keyrings目录的密钥,可以删除旧版本:
Bashsudo apt-key del KEY_ID
不过不建议在不了解用途时随意删除,因为可能导致其他软件源失效。
处理Kali APT缓存异常导致的签名错误
部分GPG错误并非密钥问题,而是APT缓存损坏。
可以清理缓存:
Bashsudo apt clean
删除索引:
Bashsudo rm -rf /var/lib/apt/lists/*
重新下载:
Bashsudo apt update
如果使用代理服务器或者网络环境不稳定,也可能导致下载的Release文件损坏。
检查系统时间避免GPG验证失败
GPG签名验证依赖准确时间。
查看当前时间:
Bashdate
如果时间错误,例如虚拟机快慢数小时,可能出现:
Release file is not valid yet
开启时间同步:
Bashsudo timedatectl set-ntp true
查看状态:
Bashtimedatectl status
Kali虚拟机环境中的特殊处理
很多用户通过VMware、VirtualBox运行Kali。如果快照恢复时间较旧,可能出现:
-
系统时间异常;
-
密钥过期;
-
软件索引过旧。
建议恢复快照后立即执行:
Bashsudo apt update sudo apt full-upgrade -y
保持系统组件和密钥同步。
避免Kali APT GPG错误的最佳实践
定期更新系统
建议保持Kali Rolling更新:
Bashsudo 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发行版的发展方向。