kali-apt update时报The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ED444FF07D8D0BF6解决方案
说到GPG就必须先要说一下PGP(Pretty Good Privacy),它们都是OpenPGP标准的具体软件实现。上世纪90年代初 Phil Zimmermann 开发了PGP,用以保护个人和商业机构数据的隐私,很快就受到了普遍的欢迎和采用。
但有一个问题,PGP是个商业软件,据说价格还挺贵(我也没买过,10来年前曾经用过一段时间破解版)。于是 GNU 组织依据 OpenPGP 标准开发了开源免费的 GPG,从此受到开源世界的普遍采用,尤其是类 Unix 系统平台。它的全名为 GnuPG(GNU Privacy Guard)。
由于基于相同的技术标准,所以在原理上这两软件是相同的,它们都是基于公钥算法来实现数据的加密和身份验证。公钥算法即『非对称算法』。一次数学运算,生成两个密钥,即公钥和私钥。公钥加密的数据只有私钥能解密,反之亦然。公钥是发布出来给别人用的,因此不需要考虑机密性,谁获得都行。而用公钥加密的数据,只有对应的私钥才能解密,因此私钥的机密性是公钥加密体系的根基,一旦私钥泄漏,即无秘密可言。反过来私钥的持有者,也可以用私钥来加密数据发给他人,当数据接收者用对应的公钥解密了数据,则反向证明数据一定来自于私钥的持有者,因此私钥加密数据的过程被称为签名,是对数据发送者身份的证明。
apt 包管理系统同样采用了 GPG 加密验证方式。Kali Linux 官方拥有自己的 GPG 公私钥对,公钥被其部署在每一个安装了Kali Linux系统的计算机中。同时官方所有的更新包都使用自己的私钥进行了签名,客户端会使用自己计算机中 Kali 官方的公钥来对这个签名进行验证,以此来确保更新数据包确实来自于Kali官方,并且传输过程中没有被篡改。
简单来理解,公钥和私钥都是个密码。但即使再复杂的密码,如果用的时间足够长的话,都有可能被破解(尤其是在这个量子计算飞速发展的时代)。因此每个公私钥对在生成的时候,都要设置一个有效期,密钥一旦过期,则被视为不再安全。通常密钥有效期以年为时间单位,一般不超过 5 年。
这次 Kali 更新时的报错信息就明确说明原因是密钥过期,同时给出了过期密钥的 ID。
其实我们可以运行下面的命令来查看系统里所有的密钥信息:
apt-key list
输出结果的最后一行就是导致这次问题的公钥,到期时间是2018年2月2日(有效期大约是 6 年)。
既然是Kali官方的密钥过期,那就需要 Kali 官方自己先更新一下,然后再把更新后的公钥发给我们。其实这件事Kali官方已经做了,但作为 Kali 系统使用者的我们,也要更新一下自己电脑中的对应公钥。
获得新的公钥可以有几种方法,我们可以到Kali官方的密钥下载站上自己下载,然后将下载的新公钥导入自己系统。这个过程可以通过系统命令直接完成,也可以手动下载后,再使用系统命令导入密钥。
我们也可以从GPG的密钥发布服务器上下载Kali的新公钥。是的,GPG 是有自己官方密钥发布服务器的。作为一个受信的仲裁方,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/main/k/kali-archive-keyring/kali-archive-keyring_2018.1_all.deb
apt install ./kali-archive-keyring_2018.1_all.deb
成功更新密钥之后,我们就可以正常的 update / upgrade 了。
其实作为普通用户,我们每个人都可以生成自己的 GPG 密钥对,然后把公钥发布到 GPG 官方服务器上。这样的话,如果我要加密数据发送给你,就可以获取并使用你的公钥来进行加密,这样加密的数据就只有你能解密,因为只有你才有自己的私钥。
整个这个过程和证书加密的PKI架构非常相似。
注: 转自苑房弘老师的公众号 OG完美主义者