在上一个问题中,我发现我应该设置 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。它还将您的 cookie 设置为标记为“安全”,并启用HSTS,其中每一个都是非常好的防止 SSL 剥离的保护措施。
即使 HTTPS 保护您在“ https://example.com/yourapp ”上的应用程序免受 MITM 攻击,如果有人在您的客户端和您的服务器之间进行攻击,他们也可以很容易地让您访问“ http://example.com/yourapp ” . 如果没有上述保护措施,您的浏览器会很乐意将会话 cookie 发送给执行 MITM 的人。
设置config.force_ssl
包括ActionDispatch::SSL
. 文档描述的ActionDispatch::SSL
功能如下(为清楚起见添加了重点):
该中间件在 时被添加到堆栈config.force_ssl = true
中,并通过在 中设置的选项config.ssl_options
。它执行三项工作来强制执行安全的 HTTP 请求:
TLS 重定向:将 http:// 请求永久重定向到
具有相同 URL 主机、路径等的 https://。默认启用。设置config.ssl_options
为修改目标 URL(例如redirect: { host: "secure.widgets.com", port: 8080 }
),或设置
redirect: false
为禁用此功能。
安全 cookie:在 cookie 上设置secure
标志以告诉浏览器它们不能与 http:// 请求一起发送。默认启用。设置
config.ssl_options
为secure_cookies: false
禁用此功能。
HTTP 严格传输安全 (HSTS):告诉浏览器将此站点记住为 TLS-only 并自动重定向非 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/ } } }
此设置通过将 HTTP 请求重定向到相应的 HTTPS 来强制使用 HTTPS。所以浏览器访问http://domain.com/path
将被重定向到https://domain.com/path
.
将设置注释掉将允许这两种协议。
您仍然需要配置您的 Web 服务器来处理 HTTPS 请求。
它强制与服务器的所有通信都被加密并使用 SSL,即通过 HTTPS。
当您将它包含在控制器中时,该控制器将仅接受 HTTPS 请求。
有用的网址: