如何在apt-get中使用https?


51

是否apt-get使用https或任何类型的加密?有没有一种方法可以配置它以使用它?


3
请注意,由于漏洞(例如bugs.launchpad.net/ubuntu/+source/apt/+bug/1647467 ...)绕开了InRelease签名,因此无论如何配置HTTPS可能是一个好主意。
罗伊斯·威廉姆斯

whydoesaptnotusehttps.com是一个网页,可以准确且广泛地回答此问题。
m.raynal '18

1
有一个更为平凡的原因使之有用。我经常与断开的“透明”代理建立Internet连接,该代理倾向于阻止某些Deb下载(它们可能触发某些愚蠢的恶意软件阻止程序)。但是通过https,代理不知道我正在下载什么,因此不会受到干扰。
Nate Eldredge

Answers:


53

apt-get(以及其他程序包处理命令,它们是同一APT库的前端)可以使用HTTP,HTTPS和FTP(以及已挂载的文件系统)。如果https:///etc/apt/sources.list和中指定URL /etc/apt/sources.list.d/*,则APT将使用HTTPS。

APT验证软件包的签名。因此,您不必具有提供数据身份验证的运输形式。如果攻击者修改了您正在下载的文件,则会注意到这一点。使用签名验证比使用HTTPS连接更好,因为它可以检测到正在从中下载的服务器上的攻击,而不仅仅是传输中的攻击。

更准确地说,包的(简化)数据流如下:

  1. 该软件包在构建机器上生产。
  2. 该软件包在构建计算机上签名。
  3. 已签名的软件包将复制到下载镜像。
  4. 您下载软件包。

HTTPS确保第4步正确进行。程序包签名可确保正确执行步骤2至4。

实际上,HTTPS对于第4步有一个小的好处:程序包签名仅确保程序包是真实的。步骤4中的攻击者可能会冒充合法服务器并提供过时的软件包版本。例如,攻击者可以阻止您下载任何安全更新,以期利用计算机上的漏洞(如果该漏洞不是用于攻击的,则应予以修补)。这不是一个非常现实的情况,因为它需要一个活动的攻击者(因此必须是可以控制您的Internet连接的人),但是原则上可能会发生。

HTTPS的另一个好处是,如果您试图掩盖从窥探网络连接的人那里下载Ubuntu软件包的事实。即使这样,窃听者仍可以看到您要连接到的主机。如果您连接到Ubuntu镜像并下载数百兆字节,则很明显,您正在下载Ubuntu软件包。窃听者还可以从文件大小中大致确定要下载的软件包。因此,HTTPS仅在您从还提供其他类似大小文件的服务器上下载时才有用–我看不到第三方包,只有在非常特殊的情况下,才有意义。

重申一下:HTTPS的通常好处是,当您下载Ubuntu软件包时,它知道您已连接到真实服务器,因此没有用。与HTTPS相比,包上的签名验证可提供更强大的保证。


11
这并不是说它不太安全,而是它与您要保护的内容不太相关。使用APT,对事务的内容进行加密并不是那么重要,因为您要下载的内容没有争议:它与许多人下载的Ubuntu包相同。但是重要的是确保您收到的文件没有被篡改。
thomasrutter 2012年

3
几周前,我尝试将源更改为https,但根本无法正常工作,apt-get update尝试访问链接时会报告错误。与ppas:相同。有人尝试过吗?
Strapakowsky 2012年

8
存储库(更新服务器)必须支持https / SSL才能工作。主要archive.ubuntu.com 没有。你可以在浏览器中检查是否有服务器通过在前面HTTPS支持它://的URL,看如果你得到一个目录列表,等等
ISH

7
“第4步中的攻击者可能会冒充合法服务器并提供过时的软件包版本。” 实际上,我们通过给包裹信息指定有效期来防止这种情况。在此日期之后,APT将警告您的镜子已过时。
风滚草

4
以下是所有支持HTTPS的15个镜像的列表以及生成列表的脚本:pastebin.com/QY2TQ1dq
Shnatsel 2014年

13

使用APT,通常更重要的不是连接已加密,而是接收到的文件未被篡改。

APT具有内置的签名验证来确保这一点。

加密将阻止窃听者看到您正在下载的内容,但是您实际下载(和请求)的内容却毫无争议:它与数千名其他Ubuntu用户正在下载的文件相同,并且文件不包含任何内容。可在许多服务器上免费使用。不过,如果您对于要下载的软件包特别需要保密,可以使用HTTPS(在您的sources.list中指定)。

APT内置的签名验证将确保您收到的文件未被篡改。文件的来源并不重要,甚至可以在您和服务器之间使用代理或反向代理来减少服务器负载或加快速度。签名验证仍可确保您获取未修改的文件,并将仅与原始文件和Ubuntu私钥副本一起加密产生的签名与之匹配。

如果您切换到HTTPS,则将无法再使用代理服务器来加快访问速度或减少负载。而且,它不会为未篡改APT签名验证尚未提供的任何保证。但是,这意味着窃听者(例如您的ISP)将无法看到您正在下载的软件包(这不太可能是机密的,而且正如Gilles指出的那样,他们可以从文件大小中进行猜测)。


3
HTTPS不会提供太多的隐私,因为文件的大小是可见的。实际上,HTTPS有一个小的好处,那就是它可以确保控制您的网络连接的攻击者不能以静默方式将陈旧的数据泄漏出去。这有点牵强。
吉尔斯(Gillles)“所以-别再作恶了”

6
好点。我认为“陈旧的数据”是指中间人设置的Ubuntu镜像版本,该版本由稍早的版本组成,但仍与Ubuntu当时的签名保持不变。
thomasrutter 2012年

5
对,就是那样。如果我有点point语,请不要犹豫指出-我需要记住,这是Ask Ubuntu而不是Information Security
吉尔(Gilles)'所以

apt似乎有一个大漏洞-当您apt update和中间一个人在喂您伪造索引时,apt会愉快地接受中间人给您的任何东西并将其写在/ var / lib / apt / lists中。这不仅是中间有一个邪恶的人,而且就像您在酒店WiFi上并被重定向到登录页面一样,如果您apt update在登录之前运行,则/ var / lib / apt / lists会被破坏与酒店首页HTML。虚假!无论如何,基本的TLS证书检查将立即排除这种情况。
Marius

@Marius由于验证不可行,因为它涵盖了列表和软件包。如果使用标准Apt安装复制了此文件,则应将其报告给维护人员。
thomasrutter

1

最新的APT版本内置了TLS支持,因此您只需要用- https前缀替换包存储库镜像URL 。对于Debian,它可能看起来像这样:

deb https://deb.debian.org/debian/ stretch main
deb https://deb.debian.org/debian-security stretch/updates main
deb https://deb.debian.org/debian/ stretch-updates main

即使APT包含其自己的签名协议以确保软件包不被篡改,这也很有用,因为APT中可能存在错误(如:CVE-2016-1252CVE-2019-3462)。HTTP / TLS协议及其密码受到严格审查,因此,如果您添加此安全保护层,则严重的零日漏洞非常不可能发生。


糟糕,我现在才意识到此站点是Ask Ubuntu。:)我找不到适用于Ubuntu的类似CDN解决方案。
Leif Arne Storset

0

我认为这个问题可以使用针对外行的指导性答案,所以……

默认情况下,APT在Ubuntu 19.10(Eoan)(仍在开发中)的每日内部版本中仍默认不使用HTTPS。可以通过检查/etc/apt/sources.list文件并注意所有源URL都使用“ http:” URL方案来验证这一点。

要将其配置为使用HTTPS,可以按照以下说明进行操作:

首先,找到一个可信赖的官方Ubuntu存档镜像,该镜像支持HTTPS:

  1. 导航到Ubuntu官方存档镜像页面。
  2. 在该网页上的表中,确定(A)托管在您认为可信任的网站上的镜像,(B)带有“ http:”镜像,并且(C)可以满足您的地理位置,服务器速度和更新要求新鲜度偏好。
  3. 在该网页的表中,单击在步骤(2)中标识的镜像的“ http”链接,以访问镜像的“ http:”版本。
  4. 在浏览器地址栏中,手动将网页URL中的“ http:”更改为“ https:”。
  5. 再次导航至镜像(通过“ https:” URL)以查看其是否解析。

例如,我认为Wikimedia Foundation是值得信赖的,因此我访问了http://mirrors.wikimedia.org/ubuntu/镜像URL,随后将其更改为https://mirrors.wikimedia.org/ubuntu/,该URL 成功解决了。

如果您使用Firefox(67.0.4)并安装了HTTPS Everywhere(2019.6.27)扩展名并启用了“加密所有网站合格”功能(通过工具栏按钮面板),则可以省略步骤(4)和(5)因为该扩展名将自动修改URL以使用HTTPS,因此允许一个或多个立即确定URL的“ https:”版本是否可以解析。

,更新您的APT来源列表:

  1. 执行命令sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup以备份您的更新源列表。
  2. 更换镜底座URL示出的这里https://mirrors.wikimedia.org -in命令sudo sed --in-place --regexp-extended 's http://(us\.archive\.ubuntu\.com|security\.ubuntu\.com) https://mirrors.wikimedia.org g' /etc/apt/sources.list与镜基URL首选镜的和,然后,执行该命令。

第三,从Ubuntu档案库外部安装软件后,应检查/etc/apt/sources.list.d/目录中“ http:”源的内容,这些源可能会更改为“ https:”。

例如,Microsoft的Visual Studio Code程序包将一个vscode.list文件添加到此目录,该文件指定“ http:” URL。简单地将URL方案从“ http:”更改为“ https:”就可以通过HTTPS进行更新。

在修改它们之前,请考虑备份任何此类源文件。

最后,执行更新以确保更新将正常运行:

  1. 执行sudo apt-get update命令。
  2. 如果这不能按预期工作,请通过执行sudo cp /etc/apt/sources.list.backup /etc/apt/sources.list命令还原您制作的备份源列表文件。

还值得注意的是,有一个apt-transport-https软件包可以为APT添加HTTPS支持。但是,根据网页https://launchpad.net/ubuntu/eoan/+package/apt-transport-https看来,此软件包显然是不必要的,并且根据执行命令后显示的信息,自APT 1.5开始就不需要此软件包apt-cache show apt-transport-https

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.