我最近更改了我在Heroku上运行的Rails应用程序的域名。我将原始版本重定向到新版本,并且在过去的几个月中一直在运行SSL。我试图从原始域中删除SSL,因为它只是重定向。
我做了我认为应该做的一切:
config.force_ssl = false
关闭了应用中的SSL
如果我去myapp.herokuapp.com,一切都很好,但如果我去myapp.com或www.myapp.com,它会自动尝试将我带到网站的安全版本{{3}我从浏览器中收到标准的安全错误警告。
我错过了什么吗?这是一个缓存问题吗?是否需要时间才能启动DNS更改?我尝试过几台机器/浏览器,问题在所有机器/浏览器上都是一致的。
最糟糕的情况是,我肯定可以重新添加SSL端点,但这似乎有些过分。
答案 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
清除网络浏览器的缓存,就是这样!