【问题标题】:How to disable HTTP Strict Transport Security?如何禁用 HTTP 严格传输安全性?
【发布时间】:2012-05-24 15:45:33
【问题描述】:

我有一个带有config.force_ssl = true 的 Rails 应用程序,但现在我不想要 SSL 加密,但我的应用程序仍在重定向到 https。我读到这是 Apache 上的 HTTP 严格传输安全问题。如何禁用它?

【问题讨论】:

    标签: ruby-on-rails apache ssl https hsts


    【解决方案1】:

    如果您正在开发应用程序/站点,并且出于任何原因选择使用域 .dev 或 .app,并且如果您使用 Chrome、Edge(基于 Chromium)作为浏览器,您将无法使用摆脱此错误,因为 Google 购买了 TLD .dev 和 .app 并强制对这些域使用 HTTPS。

    这里的“所谓”解决方法是您应该将 .dev 或 .app 更改为其他内容,比如 .local。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我发现我无法在 Chrome 中删除 HSTS 条目,因为我使用 IP 地址进行开发。我似乎无法让chrome://net-internals/#hsts 删除该条目。我发现 Chrome 将条目存储在 ../AppData/local/Google/Chrome/User Data/Default/TransportSecurity 中,所以我只是删除了该文件。它当然会删除所有 HSTS 请求,但我怀疑它们会随着时间的推移而重建。

      【讨论】:

        【解决方案3】:

        Figured id 对此提供了一些思考。将缓存时间设置为 0 是最好的选择,如果您将其关闭,则需要将其设置为 0 数周以清除客户端浏览器。如果您只需要在 chrome 中清除 HSTS(对于您自己的浏览器),您可以在地址栏中使用 chrome://net-internals/#hsts 在您的特定浏览器中清除您网站的缓存。结合下面的“门口”就变得很有用了。

        您可以通过设置/欺骗自定义标头 => 键来设置临时 HSTS 模式。基本上,如果存在特殊的请求标头,并且它与键匹配,则将 HSTS 设置为您需要的任何缓存时间。这将允许您为除您之外的所有流量打开或关闭 HSTS。在全局启用之前尝试 HSTS 很有用(以确保所有资产正在加载)。如果您想在修复某些内容时暂时清除客户端缓存(为您留出测试空间),这也很有用。

        【讨论】:

        • 如何设置“缓存时间”? chrome://net-internals/#hsts没有选项
        • @Pacerier Ah chrome 可以清除 HSTS 但无法设置缓存时间。缓存时间来自原始/站点 HSTS 标头。它的一部分可能看起来像这样:strict-transport-security:max-age=15552000...基本上你需要它说 strict-transport-security:max-age=0 以便为客户端禁用 HSTS 并清除他们的重定向(或者,允许他们使用无效的 SSL 连接)。
        • 但是用户自己怎么能在客户端编辑呢?
        • @Pacerier 嗯,我不确定您能否在浏览器获取响应之前劫持网站的响应,并包含/欺骗该标头。老实说,我从未尝试过它,但使用一些工具可能是可行的,也许?
        【解决方案4】:

        这不是 Apache 的问题,而是 Rails 发送 HSTS 标头这一事实。

        在 Chrome 中,您可以通过进入about:net-internals 来清除 HSTS 状态,如ImperialViolet: HSTS UI in Chrome 中所述。您可能还需要清除缓存,因为 config.force_ssl = true 也使用 301(永久)重定向。

        此外,根据this answer,您还可以让您的应用程序发送一个 max-age=0 的 STS 标头。在您的控制器中:

        response.headers["Strict-Transport-Security"] = 'max-age=0'
        

        【讨论】:

        • 应该记录一下,一旦您在 Rails 中启用 'force_ssl' 选项,禁用它的唯一方法是让所有访问者清除浏览器缓存。 :(
        • 如果不是这种情况,您将很容易受到 HSTS 旨在缓解的 SSL 剥离的攻击。与 Rails 无关。
        • 这对于开发人员来说还是值得一提的 :) 感谢@Bruno 的回答
        • 它在 HSTS 规范中:tools.ietf.org/html/…
        • Firefox 浏览器清除 HSTS 缓存的唯一方法:在您的 Profile 文件夹中找到并打开文件 SiteSecurityServiceState.txt。此文件包含您访问过的域的缓存 HSTS 和 HPKP(密钥固定,一种单独的 HTTPS 机制)设置。它可能非常杂乱无章。搜索您要清除 HSTS 设置的域并将其从文件中删除。每个条目都带有域名。删除从所需域名开头到下一个列出的域的整个条目。
        【解决方案5】:

        只是想指出@Bruno 的答案和@JoeVanDyk 的建议是正确的,并且可以在 Rails/Apache 的上下文之外应用。我正在使用 PHP 和 Nginx。在我的情况下,PHP 与它无关,但这里是 Nginx 的步骤:

        //sorry here's the nginx.conf part first, can't figure out how to mix multi-line 
        //code with an ordered list
        
        server {
           #...
           #change:
           # add_header  Strict-Transport-Security "max-age=315360000; includeSubdomains";     
           #to:
           add_header  Strict-Transport-Security "max-age=0;";
           #...
        }
        
        1. 清除您的“浏览器历史记录”。为了澄清@JoeVanDyk 的建议,我认为您需要清除“浏览历史记录”,因为清除缓存对我不起作用(在 Chrome/Firefox 上测试,如果您了解更多,请添加 cmets)。

        2. nginx.conf 文件(见上面的代码)

        3. 重启服务器

          root@ip-xxx-xxx-xxx:~# /etc/init.d/nginx restart.

        在此之后,您可以将 nginx add_header Strict.. 命令恢复到您之前的状态。只需确保再次重复步骤 1-3。

        【讨论】:

        • 我应该补充一点,您不需要重新启动,而是重新加载。例如。 /etc/init.d/nginx reload
        猜你喜欢
        • 2015-10-30
        • 2018-06-14
        • 1970-01-01
        • 2014-11-12
        • 2015-09-14
        • 1970-01-01
        • 2021-09-16
        • 2014-03-20
        相关资源
        最近更新 更多