禁用Heroku应用程序的SSL

12
我最近更改了一个在Heroku上运行的Rails应用程序的域。我将原始域重定向到新域,并在过去几个月中一直在两个域上运行SSL。我试图从原始域中删除SSL,因为它只是重定向。
我做了我认为应该做的一切:
- 在production.rb中使用config.force_ssl = false关闭应用程序中的SSL - 将DNS ALIAS和CNAME更改为指向“myapp.herokuapp.com” - 删除SSL端点和证书
如果我访问myapp.herokuapp.com,一切正常,但如果我访问myapp.com或www.myapp.com,它会自动尝试将我带到站点的安全版本https://myapp.com,并且我会收到浏览器的标准安全错误警告。
我是否遗漏了什么?这是缓存问题吗?DNS更改需要时间才能生效吗?我已经在几台机器/浏览器上尝试过,问题在所有机器上都是一致的。
最坏的情况下,我肯定可以重新添加SSL端点,但这似乎有些过度。
2个回答

13

config.force_ssl = true启用一个有效期为一年的Strict Transport Security(严格传输安全)头部(HSTS)。有关详细信息,请参见此问题。这样的头部强制支持它的浏览器在一年内通过HTTPS与服务器通信,以防止中间人攻击中的下降HTTPS连接到HTTP。

对于曾经使用过HSTS的生产站点,退出HTTPS并不容易。您应该保持您的站点通过HTTPS提供服务,并返回max-age=0HSTS头部来重置一年的设置。问题是要决定需要多长时间保持HTTPS。为了确保所有客户端都已切换,您应该保持1年。您可以决定缩短此时间,但会有访问不频繁的客户端无法访问网站的风险。


我发现以下内容对于让浏览器忘记使用 SSL 很有用,尤其是在我更改了配置后:https://support.mozilla.org/en-US/questions/1027355。当然,这只适用于您自己的浏览器(但在我的情况下,我还没有与任何人共享 URL)。因此,如果您的网站已经有访问者,这对他们没有帮助(除非他们在自己的计算机上执行相同的操作)。 - Nick

6
除了Jan所说的内容,这是我为了完成这个技巧所做的事情。
在application_controller.rb中:
before_filter :expire_hsts

[...]
private
  def expire_hsts
    response.headers["Strict-Transport-Security"] = 'max-age=0'
  end

在production.rb文件中

config.force_ssl = false

清除您的网络浏览器缓存,就可以了!

1
对我来说不起作用。在我的页面上显示“抱歉,但出了些问题。” - Damon Yuan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接