在先前的问题,我发现我应该设置nginx的SSL终止和没有Rails的过程中加密数据。
那么,为什么下面的存在吗?
config.force_ssl = true
我看到这个注释掉生产配置文件。 但是,如果期望的是Nginx的将处理所有的SSL东西,所以,我的Rails应用程序不会再加密数据处理是什么config.force_ssl = true
吗?
我应该把它在生产中注释掉,如果我知道我会一直使用nginx的?
在先前的问题,我发现我应该设置nginx的SSL终止和没有Rails的过程中加密数据。
那么,为什么下面的存在吗?
config.force_ssl = true
我看到这个注释掉生产配置文件。 但是,如果期望的是Nginx的将处理所有的SSL东西,所以,我的Rails应用程序不会再加密数据处理是什么config.force_ssl = true
吗?
我应该把它在生产中注释掉,如果我知道我会一直使用nginx的?
它不只是强迫你的浏览器HTTP重定向到HTTPS。 它还设置被标记你的cookies“安全”,它使HSTS ,其中的每一个对SSL剥离很好的保护。
尽管HTTPS保护您的应用程序在“ https://example.com/yourapp ”对MITM攻击,如果有人得到您的客户端和服务器之间,他们可以比较容易地让您访问“ http://example.com/yourapp ” 。 既不用上述保护措施,你的浏览器会很乐意发送会话cookie来执行MITM的人。
设置config.force_ssl
包括ActionDispatch::SSL
。 所述ActionDispatch::SSL
文档描述的功能如下(添加的,为了清楚起见重点):
请参阅包括在这里和ActionDispatch :: SSL的文档在这里 。
该中间件被添加到堆栈时config.force_ssl = true
,并且被传递在设置的选项config.ssl_options
。 它确实三项工作执行安全的HTTP请求:
TLS重定向: 永久性重定向的http://请求到https://用相同的URL主机,路径等,默认情况下启用。 设置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
告诉浏览器将这些设置应用到所有的子域。 这通过在一个子一个存在漏洞的网站免受截取你的cookies。 默认为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/ } } }
此设置强制HTTPS通过重定向HTTP请求到他们的HTTPS同行。 因此,一个浏览器访问http://domain.com/path
将被重定向到https://domain.com/path
。
离开注释掉将允许这两种协议的设置。
您还必须配置Web服务器来处理HTTPS请求。
它迫使与被加密的服务器和使用SSL,即通过HTTPS所有通信。
当你将其包含在一个控制器,控制器将只接受HTTPS请求。
有用的网址: