2

Kali2018更新问题

 2 years ago
source link: https://err0rzz.github.io/2018/03/05/Kali2018%E6%9B%B4%E6%96%B0%E9%97%AE%E9%A2%98/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Kali2018更新问题

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

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

首先,这个问题其实也出现在近期 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之后还是报错。

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

紧接着就是

仓库 “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的安装源:

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

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

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

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

sudo apt-get update


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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK