Ruby on rails 如何禁用HTTP严格传输安全性?
我有一个Rails应用程序,带有Ruby on rails 如何禁用HTTP严格传输安全性?,ruby-on-rails,apache,ssl,https,hsts,Ruby On Rails,Apache,Ssl,Https,Hsts,我有一个Rails应用程序,带有config.force\u ssl=true,但现在我不想要ssl加密,但我的应用程序仍在重定向到https。我听说这是Apache上HTTP严格的传输安全问题。如何禁用它?这不是Apache的问题,而是Rails发送HSTS头的事实 在Chrome中,您可以进入about:net internals,清除HSTS状态,如中所述。您可能还必须清除缓存,因为config.force\u ssl=true还使用301(永久)重定向 此外,根据,您还可以让应用程序发送
config.force\u ssl=true
,但现在我不想要ssl加密,但我的应用程序仍在重定向到https。我听说这是Apache上HTTP严格的传输安全问题。如何禁用它?这不是Apache的问题,而是Rails发送HSTS头的事实
在Chrome中,您可以进入about:net internals
,清除HSTS状态,如中所述。您可能还必须清除缓存,因为config.force\u ssl=true
还使用301(永久)重定向
此外,根据,您还可以让应用程序发送最大年龄为0的STS头。在控制器中:
response.headers["Strict-Transport-Security"] = 'max-age=0'
我只是想指出@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;";
#...
}
root@ip-xxx xxx xxx:~#/etc/init.d/nginx restart
在此之后,您可以将nginx
add_header Strict..
命令还原为以前的命令。只需确保您再次重复步骤1-3。我会对此提出一些想法。将缓存时间设置为0是最好的选择,如果将其关闭,则需要将其保持为0数周以清除客户端浏览器。如果您只需要在chrome中清除HST(用于您自己的浏览器),您可以使用chrome://net-internals/#hsts
,以清除特定浏览器中站点的缓存。结合下面的“门道”,它变得很有用
您可以通过设置/欺骗自定义头=>键来设置临时HSTS模式。基本上,如果存在一个特殊的请求头,并且它与一个键相匹配,那么将HSTS设置为您需要的缓存时间。这将允许您为除您之外的所有流量打开或关闭HST。用于在全局启用(确保所有资产都已加载)之前尝试HST。如果您想在修复某些内容时暂时清除客户端缓存(给您留有测试空间),这也很有用。我发现我无法在Chrome中删除HSTS条目,因为我正在使用IP地址进行开发。我似乎无法获取
chrome://net-internals/#hsts
删除条目。我发现Chrome将条目存储在../AppData/local/Google/Chrome/User Data/Default/TransportSecurity中,所以我删除了该文件。它当然会删除所有HSTS请求,但我怀疑它们会随着时间的推移而重建。如果您正在开发一个应用程序/站点,并且出于任何原因选择使用domain.dev或.app,如果您使用的是Chrome,Edge(基于Chrome)作为您的浏览器,您将无法摆脱此错误,因为Google购买了TLD.dev和.app,并强制在这些域中使用HTTPS
这里的“所谓”解决方法是,您应该将.dev或.app更改为其他内容,比如.local
希望这能有所帮助。应该记录在案的是,一旦在Rails中启用“强制ssl”选项,禁用它的唯一方法就是让所有访问者清除浏览器缓存:(如果不是这样的话,您将很容易受到SSL剥离的攻击,这正是HSTS的设计目的。与Rails无关。不过,对于开发人员来说,这是值得一提的:)感谢您在HSTS规范中给出@BrunoIt的回答:Firefox浏览器清除HSTS缓存的唯一方法:在您的配置文件文件夹中找到并打开文件SiteSecurityServiceState.txt。此文件包含您访问过的域的缓存HST和HPKP(密钥锁定,一种单独的HTTPS机制)设置。它可能非常混乱。搜索要清除HSTS设置的域,并将其从文件中删除。每个条目都带有域名。删除从所需域名开始到下一个列出的域的全部条目。我应该补充一点,您不需要重新启动,而是需要重新加载。例如,
/etc/init.d/nginx reload
如何设置“缓存时间”?chrome://net-internals/#hsts
@Pacerier Ah chrome可以清除HST,但无法设置缓存时间。缓存时间来自源站/站点HSTS标头。它的一部分可能看起来是这样的:严格传输安全性:max age=15552000
…基本上你需要它说严格传输安全性:max age=0
,以便为客户端禁用HST并清除它们的重定向(或者允许它们连接到无效的SSL)。但是用户自己如何在客户端编辑它呢?@Pacerier-hmm,我不确定你是否能在浏览器得到响应之前劫持网站的响应,并包括/欺骗该标题。老实说,我从来没有用它做过实验,但也许用一些工具它是可行的?