Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何禁用HTTP严格传输安全性?_Ruby On Rails_Apache_Ssl_Https_Hsts - Fatal编程技术网

Ruby on rails 如何禁用HTTP严格传输安全性?

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(永久)重定向 此外,根据,您还可以让应用程序发送

我有一个Rails应用程序,带有
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;";
   #...
}
  • 清除“浏览器历史记录”。为了澄清@JoeVanDyk的建议,我认为您需要清除“浏览历史记录”,因为清除缓存对我不起作用(在Chrome/Firefox上测试,如果您了解更多,请添加评论)

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

  • 重新启动服务器

    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,我不确定你是否能在浏览器得到响应之前劫持网站的响应,并包括/欺骗该标题。老实说,我从来没有用它做过实验,但也许用一些工具它是可行的?