42

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

4

5 回答 5

74

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

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

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

response.headers["Strict-Transport-Security"] = 'max-age=0'
于 2012-05-17T09:20:52.943 回答
18

只是想指出@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 上测试,如果您了解更多,请添加评论)。

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

  3. 重启服务器

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

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

于 2013-09-21T14:28:14.677 回答
2

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

于 2017-11-20T02:31:17.747 回答
1

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

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

于 2015-02-18T21:04:44.547 回答
1

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

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

希望这会有所帮助。

于 2020-04-20T14:13:38.147 回答