为Heroku应用程序禁用SSL

时间:2013-07-21 20:22:14

标签: ruby-on-rails-3 ssl heroku

我最近更改了我在Heroku上运行的Rails应用程序的域名。我将原始版本重定向到新版本,并且在过去的几个月中一直在运行SSL。我试图从原始域中删除SSL,因为它只是重定向。

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

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

如果我去myapp.herokuapp.com,一切都很好,但如果我去myapp.com或www.myapp.com,它会自动尝试将我带到网站的安全版本{{3}我从浏览器中收到标准的安全错误警告。

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

最糟糕的情况是,我肯定可以重新添加SSL端点,但这似乎有些过分。

2 个答案:

答案 0 :(得分:12)

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

为使用HSTS提供服务的生产网站迁出HTTPS并不容易。您应该通过HTTPS维护您的网站,并使用HSTS返回max-age=0标题以重置一年设置。问题是要确定需要多长时间保留HTTPS。为了绝对确保所有客户都切换,你应该做一年。您可能决定在较短的时间内完成此操作,但可能会为不经常访问的客户打破网站。

答案 1 :(得分: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

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