请注意,此答案在水平线下方的部分是在 2012 年写的,当时是问问题的时候。当时,只有一小部分网络使用 HTTPS。从那时起,大多数网络都切换到 HTTPS,所以简短的回答是“他们是”。这个答案仍然是相关的,因为它解释了 HTTPS 在应用程序下载的上下文中做什么和不安全。
因为 HTTPS 不太适合保护大型公共文件的下载。对于这个用例,它很慢而且没那么有用。除了无能或无意识之外,还有很多不使用 HTTPS 的原因。
HTTPS 并不能完全解决问题。如果您直接从供应商的网站获取应用程序,HTTPS 确实可以确保应用程序的真实性。但是如果你从第三方获取你的应用程序(例如免费软件的镜像),HTTPS 只保护与第三方的连接。包签名方案效果更好:它可以保护整个链免受供应商的侵害。应用程序分发需要端到端保护,而 HTTPS 不提供。
HTTPS 使用更多带宽。如果不考虑缓存,每次下载的开销是最小的。这是“HTTPS 不会花费更多”的球形牛:如果您使用 SSL,则除了 SSL 端点之外,您无法缓存数据。应用程序下载在极端情况下是可缓存的:它们是许多人下载的大文件。
HTTPS 是矫枉过正。应用程序下载的机密性很少成为问题,我们所需要的只是真实性。遗憾的是,HTTPS 在不提供机密性的情况下无法提供真实性。真实性与缓存兼容,但机密性不兼容。
HTTPS 需要服务器上的更多资源。Google 邮件将其降低到 1% 的开销和 2% 的带宽开销,但这是针对一个非常不同的用例。Gmail 前端服务器的作用不仅仅是盲目地提供文件;文件服务器首先不需要强大的 CPU(它非常受 IO 限制),因此开销可能要大得多。内存开销也是如此:首先,文件服务器每个会话只需要很少的内存,几乎所有内存都是磁盘缓存。降低资源使用量需要大量工作。
HTTPS 不会帮助很多人。有安全意识的人会检查供应商提供的散列(应该通过 HTTPS)。没有安全意识的人会愉快地点击“此连接不安全”消息(那里有太多配置错误的服务器,以至于许多用户被训练忽略 HTTPS 错误)。更不用说那些不应该授予证书的狡猾的 CA。
如果您想确保获得的是真正的应用程序,请检查其签名,或根据您通过签名(例如通过 HTTPS)获得的参考值检查其哈希值。
好的供应商可以自动完成。例如,Ubuntu 提供其安装媒体的 GPG 签名。它还通过 HTTPS 提供哈希(遗憾的是,据我所知,没有从下载页面附近的任何地方链接)。之后,软件安装工具会自动检查软件包是否带有有效的签名。请参阅如何将 https 与 apt-get 一起使用?
注意:如果您直接从供应商处获取应用程序(而不是通过某些软件包存储库或应用程序市场),那么 HTTPS 确实提供了保护。因此,如果您是供应商,直接在您的网站上提供您的应用程序以供下载,请务必使用 HTTPS 保护它!