伴随着NSA启示和所有其他一切带来的偏执,我想知道为什么debian软件包安装机制不支持HTTPS进行传输,更不用说默认使用它了。
我知道debian软件包使用GPG进行了某种签名验证,但是考虑到这在安全性方面有多重要,我仍然不认为使用HTTPS传输而不是HTTP会太困难。
编辑:我主要是想保护自己免受MitM攻击(包括只是流量嗅探),而不是Debian镜像管理员。如果有人窥探我去debian镜像的流量,HTTP资料库会将整个系统设置放在桌面上。
伴随着NSA启示和所有其他一切带来的偏执,我想知道为什么debian软件包安装机制不支持HTTPS进行传输,更不用说默认使用它了。
我知道debian软件包使用GPG进行了某种签名验证,但是考虑到这在安全性方面有多重要,我仍然不认为使用HTTPS传输而不是HTTP会太困难。
编辑:我主要是想保护自己免受MitM攻击(包括只是流量嗅探),而不是Debian镜像管理员。如果有人窥探我去debian镜像的流量,HTTP资料库会将整个系统设置放在桌面上。
Answers:
有。您需要安装该软件包apt-transport-https
。然后您可以使用类似
deb https://some.server.com/debian stable main
在您的sources.list
文件中。但是通常这不是必需的,因为整个内容无论如何都是公共的,并且增加了加密开销和延迟。由于您不信任攻击者的公钥,因此即使HTTP流量也可以免受MitM攻击。apt
当攻击者注入操纵过的软件包时,将警告您并且无法安装软件包。
编辑:如评论中所述,使用TLS存储库确实确实更安全。研究表明,由于HTTP传输易受重放攻击,因此在未加密的存储库上使用apt确实会带来安全风险。
您的假设是错误的:您可以使用HTTPS下载。您只需要找到一个支持它的镜像,然后将其URL放在源列表中即可。您需要安装该apt-transport-https
软件包。
Debian不会使HTTPS下载变得容易,因为这样做几乎没有好处。Debian软件包分发已经包含了一种验证软件包的机制:所有软件包都使用Gpg签名。如果活动的中间人将您的流量重定向到包含损坏的程序包的服务器,则将检测到损坏,因为GPG签名无效。使用GPG而不是HTTPS的优势在于,它可以抵御更多威胁:不仅可以抵御最终用户连接上的活动中间人,而且还可以防止恶意或受感染的镜像或包分发链中任何位置的其他问题。
HTTPS确实提供了一点隐私保护优势,因为它会使您下载的程序包变得模糊。但是,被动的观察者仍然可以检测您的计算机与软件包服务器之间的流量,因此他们将知道您正在下载Debian软件包。他们还可以从文件大小中了解要下载的软件包。
HTTPS可以提供帮助的一个地方是引导信任,以获取已知有效的安装映像。Debian似乎没有提供:提供安装媒体的校验和,但仅通过HTTP。
就在最近,我用公司的apt库解决了这个问题。问题是,如果我们使用标准的http传输,那么其他人都可以轻松获得软件包。由于公司正在打包自己的专有软件,并且不想与所有人共享,因此HTTP传输成为一个问题。不是悲剧,而是问题。有两种方法来限制对程序包的访问-防火墙,使用ssh作为传输方式限制Web服务器级别的访问。关于此主题的阅读非常容易,可以在这里找到: 限制对私有Debian存储库的访问
在我们的案例中,我们决定使用https传输+客户端证书身份验证。简而言之,它需要做的是:
配置位于仓库前面的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;
}
}
将客户端证书,客户端密钥和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'
到这里,不再有对存储库的未经授权的访问。因此,这是非常有用且功能强大的事情。
请注意,由于存在诸如
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1647467
...绕开了InRelease签名,无论如何配置HTTPS可能是一个好主意。
对于“匿名”用例,还可以使用apt-transport-tor
它tor+http://
在sources.list文件中放入URI 。这比简单地加密与镜像的连接要好得多。
例如,即使是使用HTTPS,本地观察者仍会知道您正在更新或安装软件,并且可能可以对正在执行的操作(甚至可能是基于大小的软件包)做出一些合理的猜测。
Debian通过Tor“洋葱服务”提供APT存储库,因此您无需信任域名系统即可获得端到端加密(类似于TLS)。有关以这种方式可用的所有Debian服务,请参见onion.debian.org。Debian FTP主存储库位于vwakviie2ienjx6t.onion