为什么Debian apt工具没有https传输?


45

伴随着NSA启示和所有其他一切带来的偏执,我想知道为什么debian软件包安装机制不支持HTTPS进行传输,更不用说默认使用它了。

我知道debian软件包使用GPG进行了某种签名验证,但是考虑到这在安全性方面有多重要,我仍然不认为使用HTTPS传输而不是HTTP会太困难。

编辑:我主要是想保护自己免受MitM攻击(包括只是流量嗅探),而不是Debian镜像管理员。如果有人窥探我去debian镜像的流量,HTTP资料库会将整个系统设置放在桌面上。



不需要...这是公共内容...程序包已签名校验和
Skaperen 2015年

好的,所以您不想让网络管理员知道您要安装/升级的软件包。
Skaperen 2015年

管理员或其他任何窃听者。
zaadeh 2015年

Answers:


49

有。您需要安装该软件包apt-transport-https。然后您可以使用类似

 deb https://some.server.com/debian stable main

在您的sources.list文件中。但是通常这不是必需的,因为整个内容无论如何都是公共的,并且增加了加密开销和延迟。由于您不信任攻击者的公钥,因此即使HTTP流量也可以免受MitM攻击。apt当攻击者注入操纵过的软件包时,将警告您并且无法安装软件包。

编辑:如评论中所述,使用TLS存储库确实确实更安全。研究表明,由于HTTP传输易受重放攻击,因此在未加密的存储库上使用apt确实会带来安全风险。


7
不,大多数镜像不支持https。仅仅是因为加密这种流量没有多大意义。无论如何,正在对软件包进行验证,并且该信息是公开的。
Marco Marco

4
我可以想到几个原因,我还是可能更喜欢通过TLS下载:1)安装软件包时我可能会担心我的隐私,以及2)软件包签名检查代码中可能存在bug,而MITM可能会利用该bug。
杰克·奥康纳

2
@ JackO'Connor,虽然第一个关于隐私的异议是可以理解的,但是第二个就像说我喜欢网站使用PGP密钥对其内容签名,因为TLS代码中可能存在错误。PGP和TLS均建立信任;您不需要两者。
Paul Draper

7
@Marco您的回答不正确;大量研究论文表明,即使通过GPT签名通过HTTP访问存储库,APT和YUM存储库都容易受到重放攻击。只能100%通过TLS访问存储库。
Joe Damato

6
是@Joe Damato所指的论文- 在这里
SauceCode '16

17

您的假设是错误的:您可以使用HTTPS下载。您只需要找到一个支持它的镜像,然后将其URL放在源列表中即可。您需要安装该apt-transport-https软件包。

Debian不会使HTTPS下载变得容易,因为这样做几乎没有好处。Debian软件包分发已经包含了一种验证软件包的机制:所有软件包都使用Gpg签名。如果活动的中间人将您的流量重定向到包含损坏的程序包的服务器,则将检测到损坏,因为GPG签名无效。使用GPG而不是HTTPS的优势在于,它可以抵御更多威胁:不仅可以抵御最终用户连接上的活动中间人,而且还可以防止恶意或受感染的镜像或包分发链中任何位置的其他问题。

HTTPS确实提供了一点隐私保护优势,因为它会使您下载的程序包变得模糊。但是,被动的观察者仍然可以检测您的计算机与软件包服务器之间的流量,因此他们将知道您正在下载Debian软件包。他们还可以从文件大小中了解要下载的软件包。

HTTPS可以提供​​帮助的一个地方是引导信任,以获取已知有效的安装映像。Debian似乎没有提供:提供安装媒体的校验和,但仅通过HTTP。


有HTTPS安装介质的版本:cdimage.debian.org/debian-cd
Fedir RYKHTIK


@AaronFranke一个特定的错误,使用HTTP比使用HTTPS更容易利用,它的好处很小,是的。HTTP的攻击面似乎并不比HTTPS大:实际上HTTPS本身具有更大的攻击面,因为它涉及更多的代码。因此,它甚至根本不是净收益:这是两个边际风险之间的权衡。
吉尔斯(Gilles)'所以

9

就在最近,我用公司的apt库解决了这个问题。问题是,如果我们使用标准的http传输,那么其他人都可以轻松获得软件包。由于公司正在打包自己的专有软件,并且不想与所有人共享,因此HTTP传输成为一个问题。不是悲剧,而是问题。有两种方法来限制对程序包的访问-防火墙,使用ssh作为传输方式限制Web服务器级别的访问。关于此主题的阅读非常容易,可以在这里找到: 限制对私有Debian存储库的访问

在我们的案例中,我们决定使用https传输+客户端证书身份验证。简而言之,它需要做的是:

  1. 准备自签名证书,客户端和服务器(使用easy-rsa);
  2. 配置位于仓库前面的Web服务器仅接受https;如果是nginx,它可能看起来像:

    server {
    
      listen 443;
    
      root /path/to/public;
      server_name secure_repo;
    
      ssl on;
      ssl_certificate /etc/nginx/ssl/server.crt;
      ssl_certificate_key /etc/nginx/ssl/server.key;
    
      ssl_session_timeout 5m;
    
      ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:;
    
      ssl_prefer_server_ciphers on;
      ssl_client_certificate /etc/nginx/ssl/ca.crt;
      ssl_verify_client on;
    
      location / {
         autoindex on;
      }
    }
    
  3. 将客户端证书,客户端密钥和ca证书放入/ etc / apt / ssl,如果使用Ubuntu,则将00https文件添加到/etc/apt/apt.conf.d:

    Debug::Acquire::https "true"; Acquire::https::example.com { Verify-Peer "true"; Verify-Host "false"; CaInfo "/etc/apt/ssl/ca.crt"; SslCert "/etc/apt/ssl/client.crt"; SslKey "/etc/apt/ssl/client.key"; };

请记住,如果使用的是自签名证书,则关闭主机验证很重要:Verify-Host "false";如果不执行此操作,则会捕获错误: SSL: certificate subject name (blah-blah-blah) does not match target host name 'example.com'

到这里,不再有对存储库的未经授权的访问。因此,这是非常有用且功能强大的事情。


3
感谢您的出色回答。但我认为主要问题仍然存在。HTTPS确实应该成为通过Web和debian软件包进行传输的默认协议。该参数不应该是为什么使用HTTPS,应该为什么不应该使用HTTPS?
zaadeh 2015年

1
@aalizadeh,我同意你的看法,使用https时会产生开销,但不会产生大量开销。我认为,https不是默认传输的主要原因是某些组织明确禁止任何加密的通信(因为他们希望能够对员工通过Internet所做的事情保持警惕),这意味着存储库必须支持http和https传输。可能还有其他考虑因素
2015年

1
即使使用自签名证书,使用»Verify-Host“ false”;«是错误的。您需要使您的客户端知道(正确的)服务器证书。
阿克塞尔·贝克特

1
确实,但是在这里,我的客户只是内部系统。因此,我没有创建所有适当的pki基础结构,而是开辟了道路。是的,稍后pki被正确解决,Verify-Host为false;被删除了。是的,这一点是正确的。
at0S

1
如果使用ubuntu xenial,则以非特权用户_apt的身份来获取apt软件包,请您详细说明如何管理或解决文件权限问题,以更新此线程。
David

7

请注意,由于存在诸如

https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1647467

...绕开了InRelease签名,无论如何配置HTTPS可能是一个好主意。


1
现在也是如此:mirror.fail又名usn.ubuntu.com/3746-1又名CVE-2018-0501。InRelease签名还不够。“但是将所有镜像迁移到HTTPS将需要时间和协调!”。是。现在开始。这将不是最后一个InRelease失败。
罗伊斯·威廉姆斯

1
这是另一个示例,来自另一个生态系统-高山。其程序包管理系统默认情况下不使用HTTPS,仅依靠签名来验证程序包完整性...并且该验证在2018年9月具有可远程利用的bug:justi.cz/security/2018/09/13/alpine- apk-rce.html默认情况下,Alpine 现在应该开始使用HTTPS。
罗伊斯·威廉姆斯

4

对于“匿名”用例,还可以使用apt-transport-tortor+http://在sources.list文件中放入URI 。这比简单地加密与镜像的连接要好得多。

例如,即使是使用HTTPS,本地观察者仍会知道您正在更新或安装软件,并且可能可以对正在执行的操作(甚至可能是基于大小的软件包)做出一些合理的猜测。

Debian通过Tor“洋葱服务”提供APT存储库,因此您无需信任域名系统即可获得端到端加密(类似于TLS)。有关以这种方式可用的所有Debian服务,请参见onion.debian.org。Debian FTP主存储库位于vwakviie2ienjx6t.onion

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.