为什么不全部使用 HTTPS 呢?

如果我正在设置一个服务器,并且拥有 SSL 证书,为什么不在整个站点上使用 HTTPS,而只是在购买/登录时使用 HTTPS 呢?我认为对整个网站进行加密并完全保护用户更有意义。它将防止诸如决定什么必须被保护之类的问题,因为一切都将是安全的,而且对用户来说并不是真正的不便。

如果我已经在部分站点上使用了 HTTPS,为什么我不想在整个站点上使用它呢?

这是一个相关的问题: 为什么 https 只用于登录?,但是答案并不令人满意。答案假设您无法将 https 应用到整个站点。

35583 次浏览

我能想到几个原因。

  • 有些浏览器可能不支持 SSL。
  • SSL 可能会在一定程度上降低性能。如果用户正在下载大型公共文件,每次都可能有加密这些文件的系统负担。

Https 比普通 http 更耗资源。

它对服务器和客户端都有更多的要求。

除了 WhirlWind 的响应,您还应该考虑 SSL 证书的成本和适用性、访问问题(客户端可能无法通过 SSL 端口进行通信,尽管这种可能性不大)等等。

使用 SSL 并不能保证万无一失的安全性。这种类型的保护需要内置到应用程序的体系结构中,而不是试图依赖于某种神奇的子弹。

显而易见的原因是性能: 所有数据在传输之前都必须由服务器加密,然后在收到之后由客户端解密,如果没有敏感数据,这是浪费时间。它还可能影响网站的缓存量。

如果所有地址都使用 https://而不是我们熟悉的 http://,那么最终用户也可能会感到困惑。另外,看看这个答案:

为什么在包含 js 文件时不总是使用 https 呢?

Https 要求服务器加密和解密客户端请求和响应。如果服务器为很多客户机提供服务,那么性能影响就会增加。这就是为什么当前大多数 https 实现仅限于密码身份验证。但随着计算能力的提高,这种情况可能会改变,毕竟 Gmail 在整个网站上都使用 SSL。

SSL/TLS 的使用不够频繁。HTTPS 必须用于 整个疗程,在任何时候都不能通过 HTTP 发送会话 ID。如果您只使用 https 登录,那么您显然违反了 2010年 OWASP 前十名“ A3: 破碎的身份验证和会话管理”。

有人告诉我,在我们公司的一个项目中,他们发现 SSL 消息所占用的带宽明显大于普通消息。我相信有人告诉过我这是惊人的12倍数据。我还没有验证这个自己,它听起来很高,但如果有一些类型的标题添加到每个网页和大多数网页有少量的内容,这可能不会太远。

也就是说,在 http 和 https 之间来回切换并跟踪哪些页面对我来说太麻烦了。我只有一次尝试建立一个混合了它们的站点,但是我们最终放弃了这个计划,因为我们被复杂的事情绊倒了,比如由 Javascript 创建的弹出窗口被错误的协议附加到了上面,诸如此类的事情。我们最终只是让整个网站的 https 更少的麻烦。我想在简单的情况下,你只需要一个登录屏幕和一个需要保护的支付屏幕,它们是简单的页面,这不会是一个大问题混合和匹配。

我不太担心客户解密的负担。通常情况下,客户端将花费更多的时间等待数据通过网络传输,而不是处理数据。除非用户经常使用千兆/秒的互联网连接,否则客户端处理能力可能无关紧要。服务器加密页面所需的 CPU 能力是另一个问题。它很可能无法跟上成百上千的用户。

对于高延迟链接,初始的 TLS 握手需要额外的往返,以验证证书链(包括发送任何中间证书)、就密码套件达成一致并建立会话。一旦建立了一个会话,后续请求可能会利用会话缓存来减少往返次数,但即使在这种最佳情况下,往返次数仍然比普通 HTTP 连接所需要的多。即使加密操作是免费的往返行程不是,可以相当明显的较慢的网络链接,特别是如果网站不利用 http 流水线。对于网络中连接良好的部分的宽带用户来说,这不是一个问题。如果您在国际上做生意,使用 https 很容易造成明显的延迟。

还有一些额外的考虑因素,例如会话状态的服务器维护可能需要更多的内存,当然还有数据加密操作。任何小型站点实际上都不需要担心任何一个服务器的性能与当今硬件的成本。任何大型站点都很容易负担得起 CPU/w AES 卸载或附加卡提供类似的功能。

随着时间的推移,随着硬件和网络能力的提高,所有这些问题正变得越来越不重要。在大多数情况下,我怀疑今天是否有任何实际的区别。

可能存在操作方面的考虑,比如对 https 流量的管理限制(考虑中间内容过滤器)。.可能是一些公司或政府的规章制度。一些企业环境需要在外围进行数据解密,以防止信息泄露... ... 干扰热点和类似的基于网络的访问系统,这些系统不能在 https 交易中注入信息。在我看来,最终不默认使用 https 的原因可能很小。

为什么不把每一封平邮邮件都放在一个防篡改的不透明信封里,用挂号邮件寄出去呢?邮局的人总是拥有它的个人监护权,所以你可以非常肯定没有人窥探你的邮件。显然,答案是,虽然有些邮件值得花钱,但大多数邮件不值得。我不在乎有没有人读到我的“很高兴你出狱了”给乔叔叔的明信片。

加密不是免费的,也不总是有帮助。

如果一个会话(如购物、银行等)最终将使用 HTTPS,那么就没有理由不尽早使用整个会话 HTTPS。

我的观点是,HTTPS 应该只在不可避免的必要时使用,因为请求或响应需要保护以免受到中间窥探。作为一个例子,去看看雅虎的主页。即使您已经登录,您的大部分交互仍然是通过 HTTP 进行的。您通过 HTTPS 进行身份验证,并获得能够证明身份的 cookie,因此不需要 HTTPS 来阅读新闻报道。

除了系统负载之外,最大的原因是它打破了基于名称的虚拟主机。使用 SSL,它是一个站点-一个 IP 地址。这是相当昂贵的,而且更难管理。

除了其他原因(特别是与性能相关的原因) ,当使用 HTTPS 时,每个 IP 地址 * 只能托管一个域。

单个服务器可以支持 HTTP 中的多个域,因为 服务器 HTTP 头让服务器知道响应哪个域。

使用 HTTPS 时,服务器必须在初始 TLS 握手期间(在 HTTP 启动之前)向客户机提供其证书。这意味着 服务器头文件还没有发送,因此服务器无法知道请求的是哪个域以及响应哪个证书(www.foo.com 或 www.bar.com)。


* 脚注: 从技术上讲,如果您将多个域托管在不同的端口上,则可以托管多个域,但这通常不是一种选择。如果 SSL 证书具有通配符,则还可以承载多个域。例如,您可以使用证书 * 同时托管 foo.example.com 和 bar.example.com。Example.com

还有一个小问题(也许有人可以验证) ,如果用户在表单项中输入数据,比如文本框,然后由于某种原因刷新页面或者服务器崩溃一秒钟,用户输入的数据会使用 HTTPS 丢失,但是会使用 HTTP 保存。

注意: 我不确定这是否是浏览器特有的,但是我的 Firefox 浏览器肯定会出现这种情况。

如果整个会话都是加密的,那么您就不能在代理级别(如 ISP)使用图像和 js 等静态资源的缓存。

你应该在任何地方使用 HTTPS,但是你会失去以下的东西:

  1. 你绝对不应该在 SSL 上使用 SSL 压缩或者 HTTP压缩,因为会受到 BREACH 和 CRIME 攻击。因此,如果响应包含会话或 csrf 标识符,则不进行压缩。您可以通过将静态资源(图像、 js、 css)放在一个无 cookie 域上来减轻这种情况,并在那里使用压缩。也可以使用 HTML 缩小。

  2. 一个 SSL 证书,一个 IP 地址,除非使用 SNI,这并不适用于所有的浏览器(旧的安卓,黑莓6等)。

  3. 您不应该在页面上承载任何不通过 SSL 传递的外部内容。

  4. 当浏览器转到 HTTP 页面时,您会丢失出站 HTTP 引用标头,这对您来说可能是一个问题,也可能不是。

带有 IIS 8.0的 windows Server 2012现在提供了 SNI,该服务器名称指示允许 IIS 中的多个 SSL Web 应用程序驻留在一个 IP 地址上。