Kali2018更新问题

新学期第一篇,原本打算开开心心的打开kali复现一航师傅的实验,然而被kali的更新给搞了

首先是说签名的问题,然后我去百度了一波,在贴吧里找到大神的分析,偷一波:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
首先,这个问题其实也出现在近期 Ubuntu 系统的更新上。
Kali 和 Ubuntu 都是基于 Debian 的发行版,因此都继承使用了 apt 包管理器。为了保证更新软件包的可靠性,更新服务器会使用GPG对发布的所有数据包进行签名,以此来防止数据包被篡改或者冒名顶替。
说到GPG就必须先要说一下PGP(Pretty Good Privacy),它们都是OpenPGP标准的具体软件实现。上世纪90年代初 Phil Zimmermann 开发了PGP,用以保护个人和商业机构数据的隐私,很快就受到了普遍的欢迎和采用。
但有一个问题,PGP是个商业软件,据说价格还挺贵。于是 GNU 组织依据 OpenPGP 标准开发了开源免费的 GPG,从此受到开源世界的普遍采用,尤其是类 Unix 系统平台。它的全名为 GnuPG(GNU Privacy Guard)。
由于基于相同的技术标准,所以在原理上这两软件是相同的,它们都是基于公钥算法来实现数据的加密和身份验证。公钥算法即『非对称算法』。一次数学运算,生成两个密钥,即公钥和私钥。公钥加密的数据只有私钥能解密,反之亦然。公钥是发布出来给别人用的,因此不需要考虑机密性,谁获得都行。而用公钥加密的数据,只有对应的私钥才能解密,因此私钥的机密性是公钥加密体系的根基,一旦私钥泄漏,即无秘密可言。反过来私钥的持有者,也可以用私钥来加密数据发给他人,当数据接收者用对应的公钥解密了数据,则反向证明数据一定来自于私钥的持有者,因此私钥加密数据的过程被称为签名,是对数据发送者身份的证明。
apt 包管理系统同样采用了 GPG 加密验证方式。Kali Linux 官方拥有自己的 GPG 公私钥对,公钥被其部署在每一个安装了Kali Linux系统的计算机中。同时官方所有的更新包都使用自己的私钥进行了签名,客户端会使用自己计算机中 Kali 官方的公钥来对这个签名进行验证,以此来确保更新数据包确实来自于Kali官方,并且传输过程中没有被篡改。
这次 Kali 更新时的报错信息就明确说明原因是密钥过期,同时给出了过期密钥的 ID。
简单来理解,公钥和私钥都是个密码。但即使再复杂的密码,如果用的时间足够长的话,都有可能被破解(尤其是在这个量子计算飞速发展的时代)。因此每个公私钥对在生成的时候,都要设置一个有效期,密钥一旦过期,则被视为不再安全。通常密钥有效期以年为时间单位,一般不超过 5 年。
其实我们可以运行下面的命令来查看系统里所有的密钥信息:
# 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/ ... ring_2018.1_all.deb
# apt install ./kali-archive-keyring_2018.1_all.deb
成功更新密钥之后,我们就可以正常的 update / upgrade 了。
其实作为普通用户,我们每个人都可以生成自己的 GPG 密钥对,然后把公钥发布到 GPG 官方服务器上。这样的话,如果我要加密数据发送给你,就可以获取并使用你的公钥来进行加密,这样加密的数据就只有你能解密,因为只有你才有自己的私钥。
整个这个过程和证书加密的PKI架构非常相似。

一开始根据方法二,但是不知道是什么原因,虽然命令输入进去之后返回OK,但是重新update之后还是报错。

然后根据上面的方法一搞定了签名问题。

紧接着就是

1
2
3
4
5
6
7
8
9
仓库 “http://mirrors.ustc.edu.cn/kali sana Release” 没有 Release 文件。
N: 无法认证来自该源的数据,所以使用它会带来潜在风险。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
W: 仓库 “http://mirrors.ustc.edu.cn/kali-security sana/updates Release” 没有 Release 文件。
N: 无法认证来自该源的数据,所以使用它会带来潜在风险。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
E: 无法下载 http://mirrors.ustc.edu.cn/kali/dists/sana/main/binary-amd64/Packages 404 Not Found [IP: 202.141.176.110 80]
E: 无法下载 http://mirrors.ustc.edu.cn/kali-security/dists/sana/updates/main/source/Sources 404 Not Found [IP: 202.141.176.110 80]
E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

说我源有问题。我又去百度了一波,因为我的源是网上随便找的阿里源,好像说是sana的源已经停止了更新,就去换了波kali-rolling的安装源:

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

把原先/etc/apt/source.list里的源注释掉之后,再把上面这句话写进去。

接着就可以apt-get update慢慢等了。


今天在docker里想安装个工具,结果

1
sudo apt-get update


1
W: Size of file /var/lib/apt/lists/mirrors.aliyun.com_ubuntu_dists_trusty-updates_multiverse_source_Sources.gz is not what the server reported 7230 7618

然后此时我以为是源的问题,就按照上面的教程去把源给改了,再开开心心的update一下:

QAQ..

再去研究一下刚才那个错误,发现好像只需要将/var/lib/apt/lists/目录下所有文件删除就好了,如果去换源,反而其他工具会出错。

所以改了之后再update

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,