12

我最近更改了在 Heroku 上运行的 Rails 应用程序的域。我将原来的重定向到新的,在过去的几个月里,两者都在运行 SSL。我试图从原始域中删除 SSL,因为它所做的只是重定向。

我做了我认为应该做的一切:

  • config.force_ssl = false在 production.rb中关闭应用程序中的 SSL
  • 将 DNS ALIAS 和 CNAME 更改为指向“myapp.herokuapp.com”
  • 删除了 SSL 端点和证书

如果我访问 myapp.herokuapp.com,一切都很好,但如果我访问 myapp.com 或 www.myapp.com,它会自动尝试将我带到该站点的安全版本https://myapp.com,并且我从浏览器中收到标准安全错误警告。

我错过了什么吗?是缓存问题吗?DNS更改启动需要时间吗?我在几台机器/浏览器上试过,问题在所有机器/浏览器上都是一致的。

在最坏的情况下,我绝对可以重新添加 SSL 端点,但这似乎有点矫枉过正。

4

2 回答 2

13

config.force_ssl = true启用Strict Transport Securityheader( HSTS)max-age一年。看到这个问题。这样的标头强制支持它的浏览器通过 HTTPS 与服务器联系一年。这是为了防止中间人将 HTTPS 连接降级为 HTTP 的攻击。

将 HTTPS 用于提供服务的生产站点HSTS并不是很容易。您应该通过 HTTPS 为您的网站提供服务并返回HSTS标头max-age=0以重置一年设置。问题是决定您需要保留 HTTPS 多长时间。要绝对确保所有客户端都已切换,您应该这样做一年。您可能决定在较短的时间内执行此操作,但可能会为不常访问的客户破坏网站。

于 2013-07-22T10:39:54.510 回答
6

除了 Jan 所说的之外,这是我为达到此目的所做的。

在 application_controller.rb :

before_filter :expire_hsts

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

在生产中.rb

config.force_ssl = false

清除您的网络浏览器的缓存,就是这样!

于 2014-09-24T07:14:46.170 回答