如何在 apt-get 中使用 https?

Str*_*sky 67 encryption configuration apt official-repositories https

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

Gil*_*il' 62

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 所能提供的更有力的保证。

  • 并不是它的安全性较低,而是它与您要保护的内容的相关性较低。使用 APT,加密您的交易内容并不那么重要,因为您下载的内容非常没有争议:它与许多人下载的 Ubuntu 软件包相同。但重要的是确保您收到的文件没有被篡改。 (13认同)
  • 存储库(更新服务器)**必须支持 https/SSL** 才能正常工作。主要的`archive.ubuntu.com` **没有**。您可以通过在 URL 前添加 https:// 前缀并查看是否获得目录列表等来检查浏览器是否支持它。 (11认同)
  • “第 4 步中的攻击者可以冒充合法服务器并提供过时版本的软件包。” 实际上,我们通过为包裹信息提供到期日期来防止这种情况发生。在此日期之后,APT 将警告您的镜像已过时。 (7认同)
  • 这是支持 HTTPS 的所有 15 个镜像的列表以及生成列表的脚本:http://pastebin.com/QY2TQ1dq (7认同)
  • 几周前,我尝试将源更改为 https,但它根本不起作用,尝试访问链接时,`apt-get update` 会报告错误。与ppas:相同。有没有人试过? (3认同)
  • 事实上已经有多次 apt ([1](https://www.debian.org/security/2016/dsa-3733), [2](https://www.debian.org/security/2019) /dsa-4371)) 允许以 root 身份执行任意代码,如果使用 https 而不是 http 则将被阻止。因此 https 确实提供了真正的安全优势,因为有时会发生错误,而且您拥有的安全层越多越好。 (2认同)

tho*_*ter 16

对于 APT,通常更重要的不是您的连接是否加密,而是您收到的文件没有被篡改。

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

加密可以防止窃听者看到您正在下载的内容,但您实际下载(和请求)的内容是毫无争议的:它与成千上万其他 Ubuntu 用户正在下载的内容相同,并且文件不包含任何内容t 在许多服务器上免费提供。尽管如此,如果您需要有关正在下载的特定包的隐私,可以使用 HTTPS(在您的 sources.list 中指定)。

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

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

  • 好点。通过“陈旧数据”,我认为您的意思是中间人设置了一个版本的 Ubuntu 镜像,该版本由稍早的版本组成,但与当时 Ubuntu 签署的内容相比仍然没有改变。 (6认同)
  • 对,就是那样。不要犹豫指出我是否有点行话——我需要记住这是 [ubuntu.se] 而不是 [security.se]。 (5认同)
  • HTTPS 不会提供太多隐私,因为文件的大小是可见的。事实上,HTTPS 有一个小小的好处,那就是它可以确保控制您的网络连接的攻击者不会悄悄地溜进陈旧的数据。这有点牵强。 (3认同)
  • @Gilles 虽然我明白你的意思,但我不禁想到,鉴于如今 HTTPS 的成本微乎其微,我宁愿不广播我系统上安装的数据包列表,而是让窃听者至少付出一点努力。信息安全社区似乎有一种“如果它不是防弹的,就不要打扰”的态度,这违背了我的(可能是被误导的)常识。我想我不了解威胁模型。我们真的有一支由有能力和有动力的攻击者组成的军队吗?我认为如果攻击没有商品化,大多数想要攻击的人甚至不会尝试。 (3认同)
  • apt 中似乎有一个大漏洞——当你 `apt update` 并且中间有一个人给你提供虚假索引时,apt 很高兴地接受中间人给你的任何东西并将其写入 /var/lib/apt /列表。这不仅仅是中间有一个邪恶的人,而且就像如果你在酒店 WiFi 上并被重定向到登录页面,如果你在登录之前运行 `apt update`,你的 /var/lib/apt/列表将被酒店主页 HTML 删除。虚假!无论如何,基本的 TLS 证书检查会立即排除这种情况。 (2认同)
  • “APT 有内置的签名验证来确保这一点”。遗憾的是,apt 还存在允许 MITM 篡改该验证的内置错误(参见 [1](https://www.debian.org/security/2016/dsa-3733) 和 [2](https:/ /www.debian.org/security/2019/dsa-4371)) 并以 root 身份执行任意代码。如果使用 https 而不是 http,这些攻击将被阻止。这证明纵深防御原则在这里和其他任何地方一样适用。 (2认同)

Pat*_*ark 6

我认为这个问题可以使用带有外行说明的答案,所以\xe2\x80\xa6

\n\n

在 Ubuntu 19.10 (Eoan)(仍在开发中)的日常构建中,APT 仍然默认不使用 HTTPS。您可以通过检查 /etc/apt/sources.list 文件并注意到所有源 URL 都使用“http:”URL 方案来验证这一点。

\n\n

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

\n\n

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

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

例如,我认为维基媒体基金会值得信赖,因此我访问了http://mirrors.wikimedia.org/ubuntu/镜像 URL,随后将其更改为https://mirrors.wikimedia.org/ubuntu/,成功解析。

\n\n

如果您使用 Firefox (67.0.4) 并安装了HTTPS Everywhere (2019.6.27) 扩展,并启用了“加密所有符合条件的站点”功能(通过工具栏按钮面板),则可以省略步骤 (4) 和 (5)因为扩展程序会自动修改 URL 以使用 HTTPS,从而使人们能够更立即地确定 URL 的“https:”版本是否会解析。

\n\n

、更新你的APT源列表:

\n\n
    \n
  1. 执行命令sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup来备份您的更新源列表。
  2. \n
  3. 将命令中显示为https://mirrors.wikimedia.org \xe2\x80\x94 的镜像基 URL\xe2\x80\x94sudo sed --in-place --regexp-extended \'s http://(us\\.archive\\.ubuntu\\.com|security\\.ubuntu\\.com) https://mirrors.wikimedia.org g\' /etc/apt/sources.list替换为您首选镜像的镜像基 URL,然后执行该命令。
  4. \n
\n\n

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

\n\n

例如,Microsoft 的 Visual Studio Code 包将 vscode.list 文件添加到此目录,该文件指定“http:”URL。只需将 URL 方案从“http:”更改为“https:”即可通过 HTTPS 进行更新。

\n\n

在修改任何此类源文件之前,请考虑对其进行备份。

\n\n

最后,执行更新以确保更新正常工作:

\n\n
    \n
  1. 执行sudo apt-get update命令。
  2. \n
  3. 如果这不能按预期工作,请通过执行命令恢复您创建的备份源列表文件sudo cp /etc/apt/sources.list.backup /etc/apt/sources.list
  4. \n
\n\n

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

\n