问题描述
apt-get
是否使用https或任何类型的加密?有没有办法配置它来使用它?
最佳解决方案
apt-get
(和其他包处理命令,它们是相同APT库的front-end)可以使用HTTP,HTTPS和FTP(以及挂载的文件系统)。如果在/etc/apt/sources.list
和/etc/apt/sources.list.d/*
中指定https://
URL,则APT将使用HTTPS。
APT验证包的签名。因此,您无需使用提供数据身份验证的传输方式。如果攻击者修改了您正在下载的文件,则会注意到这一点。使用签名验证比使用HTTPS连接更好,因为它会检测您正在下载的服务器上的攻击,而不仅仅是传输中的攻击。
更确切地说,包的(简化)数据流如下:
-
该包在构建机器上生成。
-
该包在构建机器上签名。
-
已签名的包将复制到下载镜像。
-
你下载包。
HTTPS确保第4步正确发生。包签名可确保正确执行步骤2到4。
事实上,步骤4的HTTPS有一个小优点:包签名只能确保包是真实的。步骤4中的攻击者可以冒充合法服务器并提供该软件包的陈旧版本。例如,攻击者可能会阻止您下载任何安全更新,希望利用您的计算机上的漏洞(如果不是用于攻击)。这不是一个非常现实的场景,因为它需要一个主动攻击者(所以必须是控制你的Internet连接的人),但它原则上可能发生。
HTTPS的另一个好处是,如果你试图隐藏你从网络连接上的某个人那里下载Ubuntu软件包的事实。即便如此,窃听者也能看到你所连接的主人;如果您连接到Ubuntu镜像并下载数百兆字节,很明显您正在下载Ubuntu软件包。窃听者还可以从文件大小中找出你正在下载的软件包。因此,只有当您从同样提供类似大小的其他文件的服务器下载时,HTTPS才有用 – 除了third-party软件包之外,我没有看到任何意义,只有在非常特殊的情况下才会这样。
重申一下:当您下载Ubuntu软件包时,HTTPS的常见好处就是您知道自己已连接到真实服务器,这样做是没用的。软件包上的签名验证比HTTPS提供的功能更强大。
次佳解决方案
对于APT,通常更重要的不是您的连接是加密的,而是您收到的文件未被篡改。
APT具有内置签名验证以确保这一点。
加密可以防止窃听者看到你正在下载的内容,但你实际下载(和请求)的内容是非常有争议的:它将与成千上万的其他Ubuntu用户正在下载并且文件中没有包含任何内容的内容相同在许多服务器上免费提供。尽管如此,如果您需要隐私,特别是您正在下载的软件包,可以使用HTTPS(在sources.list中指定)。
内置于APT的签名验证将确保您收到的文件未被篡改。文件来自何处并不重要,甚至可以在您和服务器之间使用代理或反向代理来减少服务器负载或加快速度。签名验证仍然确保您获得未修改的文件,匹配只能通过加密方式生成的签名与原始文件和Ubuntu私钥的副本。
如果切换到HTTPS,那么您将无法利用代理服务器来加速访问或减少负载。并且它不会再增加对APT签名验证尚未给出的non-tampering的保证。但是,这意味着窃听者(例如您的ISP)将无法看到您正在下载哪些软件包(这可能不是保密的,而Gilles指出他们可以从文件大小中猜出)。