【问题标题】:Can you use gzip over SSL? And Connection: Keep-Alive headers你可以在 SSL 上使用 gzip 吗?和连接:保持活动标题
【发布时间】:2011-02-15 13:39:44
【问题描述】:

我正在评估工作中的安全 (SSL) Web 应用程序的前端性能,我想知道是否可以通过 SSL 压缩文本文件 (html/css/javascript)。我做了一些谷歌搜索,但没有找到任何与 SSL 相关的东西。如果可能的话,是否值得额外的 CPU 周期,因为响应也被加密了?压缩响应会影响性能吗?

另外,我想确保我们保持 SSL 连接处于活动状态,这样我们就不会一遍又一遍地进行 SSL 握手。我没有在 response 标题中看到 Connection: Keep-Alive。我确实在 request 标头中看到 Keep-Alive: 115 ,但这只会使连接保持活动状态 115 毫秒(似乎应用服务器在处理单个请求后正在关闭连接?)不会只要会话不活动超时,您希望服务器设置该 response 标头吗?

我了解浏览器不会将 SSL 内容缓存到磁盘,因此我们会在后续访问中一遍又一遍地提供相同的文件,即使没有任何变化。主要的优化建议是减少 http 请求的数量、缩小、将脚本移至底部、图像优化、可能的域分片(尽管需要权衡另一次 SSL 握手的成本),诸如此类的事情。

【问题讨论】:

    标签: ssl https compression gzip


    【解决方案1】:

    对于您的第一个问题:SSL 工作在与压缩不同的层上。从某种意义上说,这两个是 Web 服务器的功能,可以一起工作而不是重叠。是的,通过启用压缩,您将在服务器上使用更多 CPU,但传出流量更少。所以这更像是一种权衡。

    关于您的第二个问题:Keep-Alive 行为实际上取决于 HTTP 版本。您可以将静态内容移动到非 SSL 服务器(可能包括图像、电影、音频等)

    【讨论】:

    • 无法将资产移动到非 SSL 服务器,我们会收到混合内容浏览器安全消息“此页面包含安全和非安全项目”(或类似内容)。
    • 这取决于浏览器。有些做有些不做。 Firefox 将在即将发布的版本中删除此消息。
    【解决方案2】:

    是的,压缩可以通过 SSL 使用;它发生在数据加密之前,因此可以帮助解决慢速链接。需要注意的是,这是一个坏主意:this also opens a vulnerability

    在初始握手之后,SSL 的开销比许多人想象的要少* - 即使客户端重新连接,也有一种机制可以在不重新协商密钥的情况下继续现有会话,从而减少 CPU 使用率和往返次数。

    负载平衡器可能会破坏延续机制:如果请求在服务器之间交替,则需要更完整的握手,这可能会产生明显的影响(每个请求大约几百毫秒)。配置您的负载均衡器以将来自同一 IP 的所有请求转发到同一应用服务器。

    您使用的是哪个应用服务器?如果无法将其配置为使用 keep-alive、压缩文件等,请考虑将其放在 可以 的反向代理后面(当您使用它时,放宽发送的缓存标头静态内容 - HttpWatchSupport 的链接文章在这方面有一些有用的提示)。

    (*SSL 硬件供应商会说“最多增加 5 倍 CPU”之类的话,但一些 chaps from Google 报告说,当 Gmail 默认使用 SSL 时,它仅占 CPU 负载的约 1%)

    【讨论】:

    • 非常感谢您。我刚刚在我的网站上安装了 ssl,真的很担心它的性能并考虑如何进一步调整它。任何帮助他都会非常感激。
    【解决方案3】:

    对 SSL 使用压缩会使您面临 BREACH、CRIME 或其他选定的纯文本攻击等漏洞。

    您应该禁用压缩,因为 SSL/TLS 目前无法缓解这些长度预言攻击。

    【讨论】:

      【解决方案4】:
      1. 您可能永远不应该使用 TLS 压缩。一些用户代理(至少 Chrome)无论如何都会禁用它。

      2. 您可以选择性地使用 HTTP 压缩

      3. 你总是可以缩小

      4. 我们也来谈谈缓存

      我假设您使用的是 HTTPS Everywhere 风格的网站。

      场景:

      1. 静态内容,如 css 或 js:

        • 使用 HTTP 压缩
        • 使用缩小
        • 缓存期长(比如一年)
        • etag 的用处不大(由于缓存过长)
        • 在指向此资产的 HTML 的 URL 中包含某种版本号,以便您可以缓存-bust
      2. 包含零敏感信息的 HTML 内容(如“关于我们”页面):

        • 使用 HTTP 压缩
        • 使用 HTML 缩小
        • 使用较短的缓存周期
        • 使用 etag
      3. 包含任何敏感信息(如 CSRF 令牌或银行帐号)的 HTML 内容:

        • 无 HTTP 压缩
        • 使用 HTML 缩小
        • Cache-Control: no-store, must-revalidate
        • etag 在这里毫无意义(由于重新验证)
        • 会话超时后重定向页面的一些逻辑(考虑到多个选项卡)。如果有人按下浏览器的后退按钮,由于缓存标头,敏感信息不会显示。

      您可以对敏感数据使用 HTTP 压缩 IF:

      1. 您永远不会在响应中返回用户输入(有搜索框?不要使用 HTTP 压缩)
      2. 或者您确实在响应中返回用户输入但随机填充响应

      【讨论】:

      • 不要使用刷新标头将用户发送到登录页面。您实际上可以让用户永远保持登录状态。场景:假设会话在 20 分钟不活动后过期。用户在下午 1 点打开浏览器选项卡 A,然后在下午 1:10 打开另一个选项卡 B。下午 1:21,选项卡 A 将刷新,但他没有注销,因为选项卡 B 将他的活动超时重置为 1:30。这两个标签将永远来回切换,刷新页面并保持用户登录。否则好帖子:p
      猜你喜欢
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多