use*_*220 79 ssl ruby-on-rails nginx
在之前的一个问题中,我发现我应该设置nginx ssl终止,而不是让Rails处理加密数据.
那为什么以下存在呢?
config.force_ssl = true
Run Code Online (Sandbox Code Playgroud)
我在生产配置文件中看到了这个注释.但是,如果期望nginx将处理所有ssl的东西,以便我的rails应用程序不处理加密数据,那么做config.force_ssl = true什么?
如果我知道我将永远使用nginx,我应该把它留在生产中注释掉吗?
Dan*_*son 74
它不仅强制您的浏览器将HTTP重定向到HTTPS.它还将您的cookie设置为"安全",并启用HSTS,每个HSTS都可以很好地防止SSL剥离.
即使HTTPS在" https://example.com/yourapp "上针对MITM攻击保护您的应用,如果有人在您的客户端和服务器之间进行访问,他们也可以轻松地让您访问" http://example.com/yourapp " .如果没有上述保护措施,您的浏览器将很乐意将会话cookie发送给执行MITM的人员.
ste*_*eel 50
设置config.force_ssl包括ActionDispatch::SSL.该ActionDispatch::SSL文档描述的功能如下(添加的,为了清楚起见重点):
当中间件被添加到堆栈中时config.force_ssl = true,会传递设置的选项config.ssl_options.它执行三个作业来强制执行安全的HTTP请求:
TLS重定向:
使用相同的URL主机,路径等永久地将http://请求重定向到https://.默认情况下启用.设置config.ssl_options
为修改目标URL(例如redirect: { host: "secure.widgets.com", port: 8080 }),或设置
redirect: false为禁用此功能.
安全cookie:设置secure cookie上的标志,告诉浏览器它们不能与http://请求一起发送.默认情况下启用.设置
config.ssl_options与secure_cookies: false禁用此功能.
HTTP严格传输安全性(HSTS):告诉浏览器将此站点记住为仅TLS并自动重定向非TLS请求.默认情况下启用.配置config.ssl_options与hsts: false禁用.设置config.ssl_options与hsts: { … }配置HSTS:
expires:这些设置会持续多久,以秒为单位.默认为
180.days(推荐).符合浏览器预加载列表的最低要求是18.weeks.subdomains:设置为true告诉浏览器将这些设置应用于所有子域.这可以保护您的cookie免受子域上易受攻击的站点的拦截.默认为true.preload:宣传该网站可能包含在浏览器的预加载HSTS列表中.除了第一次访问之外, HSTS会在每次访问时保护您的网站,因为它还没有看到您的HSTS标头.为了弥补这一差距,浏览器供应商提供了一个启用HSTS的站点的烘焙列表.转到https://hstspreload.appspot.com提交您的网站以供收录.要关闭HSTS,省略标题是不够的.浏览器会记住原始的HSTS指令,直到它过期.相反,使用标头告诉浏览器立即使HSTS过期.设置hsts: false是一个快捷方式hsts: { expires: 0 }.请求可以选择退出重定向exclude:
config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }
Run Code Online (Sandbox Code Playgroud)
Ste*_*fan 10
此设置通过将HTTP请求重定向到其HTTPS对应项来强制HTTPS.因此浏览器访问http://domain.com/path将被重定向到https://domain.com/path.
保留注释的设置将允许两种协议.
您仍然必须配置Web服务器以处理HTTPS请求.
它强制与服务器的所有通信进行加密并使用 SSL,即通过 HTTPS。
当您将其包含在控制器中时,该控制器将仅接受 HTTPS 请求。
有用的网址: