近日,看着各为大佬都在更新自己的Kali 系统,今天正好无事也更新一下....
update / upgrade
妈卖批,不让更新?出错了?
华丽分割线......
首先,这个问题其实也出现在近期 Ubuntu 系统的更新上。
Kali 和 Ubuntu 都是基于 Debian 的发行版,因此都继承使用了 apt 包管理器。
为了保证更新软件包的可靠性,更新服务器会使用GPG对发布的所有数据包进行签名,以此来防止数据包被篡改或者冒名顶替。
Kali Linux 官方拥有自己的 GPG 公私钥对,公钥被其部署在每一个安装了Kali Linux系统的计算机中。同时官方所有的更新包都使用自己的私钥进行了签名,客户端会使用自己计算机中 Kali 官方的公钥来对这个签名进行验证,以此来确保更新数据包确实来自于Kali官方,并且传输过程中没有被篡改。
这次 Kali 更新时的报错信息就明确说明原因是密钥过期,同时给出了过期密钥的 ID。
简单来理解,公钥和私钥都是个密码。但即使再复杂的密码,如果用的时间足够长的话,都有可能被破解(尤其是在这个量子计算飞速发展的时代)。因此每个公私钥对在生成的时候,都要设置一个有效期,密钥一旦过期,则被视为不再安全。通常密钥有效期以年为时间单位,一般不超过 5 年。
我们运行下面的命令来查看系统里所有的密钥信息:
# apt-key list
输出结果的最后一行(图忘记截了...Sorry)就是导致这次问题的公钥,到期时间是2018年2月2日(有效期大约是 6 年)。
既然是Kali官方的密钥过期,那就需要 Kali 官方自己先更新一下,然后再把更新后的公钥发给我们。
其实这件事Kali官方已经做了,但作为 Kali 系统使用者的我们,也要更新一下自己电脑中的对应公钥。
获得新的公钥可以有几种方法,
1、我们可以到Kali官方的密钥下载站上自己下载,然后将下载的新公钥导入自己系统。这个过程可以通过系统命令直接完成,也可以手动下载后,再使用系统命令导入密钥。
2、我们也可以从GPG的密钥发布服务器上下载Kali的新公钥。
作为一个受信的仲裁方,GPG 在全球提供大量的密钥服务器,这些服务器之间会进行定期的数据同步,我们可以任选一个 GPG 密钥服务器来下载密钥。这些服务器也是我们用来验证密钥所有者的重要途径。
具体更新方法有以下几种方法:(任选一种即可)
1、# apt-key adv --keyserver keys.gnupg.net --recv-keys ED444FF07D8D0BF6
2、# wget -q -O - archive.kali.org/archive-key.asc | apt-key add
3、# gpg --keyserver hkp://pgpkeys.mit.edu --recv-key ED444FF07D8D0BF6
# gpg -a --export ED444FF07D8D0BF6 | sudo apt-key add -
4、# wget https://http.kali.org/kali/pool/ ... ring_2018.1_all.deb
# apt install ./kali-archive-keyring_2018.1_all.deb
成功更新密钥之后,我们就可以正常的 update / upgrade
了。
重复输入apt-getupdate & apt-get upgrade
和apt-get dist-upgrade
直至没有可更新的软件为止,然后输入apt-get clean
,最后输入reboot
重启。
更新完毕。
PS:附赠一个清华大学更新源
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
命令:vim /etc/apt/sources.list