为Heroku应用程序禁用SSL

Lev*_*Lev 11 ssl heroku ruby-on-rails-3

我最近更改了我在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端点,但它看起来有点过分.

Jan*_*bel 12

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

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


Sté*_*ane 6

除了Jan所说的,这就是我做的伎俩.

在application_controller.rb中:

before_filter :expire_hsts

[...]
private
  def expire_hsts
    response.headers["Strict-Transport-Security"] = 'max-age=0'
  end
Run Code Online (Sandbox Code Playgroud)

在production.rb

config.force_ssl = false
Run Code Online (Sandbox Code Playgroud)

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