在AWS ELB应用程序负载平衡器中启用HSTS

时间:2018-08-18 08:16:45

标签: amazon-web-services ssl iis amazon-elb hsts

我们希望对我们的IIS部署的Web应用程序启用HSTS。

我们有SSL终止ELB应用程序负载平衡器。我们已经在IIS中启用了URL重写模块,并配置了x-Forward-Proto标记来决定并启用响应中的HSTS标头。

当前,ALB似乎没有将自定义标头从IIS传递到ALB,再传递给最终用户。我们想看看是否有一种方法可以在允许接受自定义标头的ALB级别启用HSTS,还是可以在IIS级别设置HSTS并使ALB可以通过HSTS标头传递到浏览器?

2 个答案:

答案 0 :(得分:3)

HSTS是由后端而不是由负载均衡器控制的策略。有人可能会说AWS可以做到这一点,但是还有其他一些问题使事情变得更加复杂(违反规范,HTTP的永久重定向等)

HSTS的问题在于您不能(不应)通过HTTP发送严格传输安全性。规范说只能通过安全连接发送标头。 HTTP不安全。由于负载平衡器正在通过HTTP与后端通信,因此IIS不会发送标头。您需要在后端使用HTTPS来启用HSTS。

RFC6797

如果您的目标是向客户端发送“严格的传输安全性”,请在负载均衡器上使用第4层侦听器,并在后端处理HTTPS。如果请求通过HTTP到达,则发送永久重定向(301)。好处包括绝对控制,改进的HTTP / 2等。

另一个选择是更改您的侦听器,以使用HTTPS与后端通信。在后端设置HTTPS和SSL。

答案 1 :(得分:2)

听起来这是OP所使用的方法,但是由于某些原因没有传递标头。我只想确认这种方法确实可行,并提供其他详细信息。

完全有可能通过HTTP在后端服务器上设置HSTS标头。最终,它只是一个头文件,服务器将很高兴地发送它。

但是,根据HSTS规范,浏览器将忽略HTTP响应上收到的HSTS标头。

但是,有一种方法可以使其工作,首先,您将后端服务器配置为发送HSTS标头。

然后,假设应用程序负载平衡器正在侦听HTTPS,但是您的目标组(和后端服务器)在HTTP上,则会发生以下情况:

  • 浏览器通过HTTPS向ALB发送请求
  • ALB通过HTTP转发到后端的请求
  • 后端服务器通过HTTP将包括HSTS标头的响应发送到ALB
  • ALB通过HTTPS 向浏览器发送相同的响应+标头。

因此,浏览器通过HTTPS接收响应和HSTS标头,它将服从HSTS。

反对这样做的一个论点是,您根本不应该通过HTTP发送HSTS标头。但是,同一论点适用于您的整个网站-没有人应该通过HTTP向互联网提供任何网站。如果您认为在ALB处终止HTTPS并在HTTP上运行后端服务器是安全的,则以相同的方式发送HSTS标头同样安全。


注意:如果您使用的是HSTS,则几乎可以肯定已经有了从HTTP到HTTPS的重定向。请记住,HSTS标头将与通过HTTP重定向一起发送,但浏览器将忽略它。一旦发生重定向,并且HSTS标头通过HTTPS发出,浏览器就会服从它。

从技术上来说,根据RFC6707 section 7.2,您不应通过简单的HTTP将HSTS标头发送回浏览器。 应该要做的是根据X-Forwarded-Proto请求标头值使标头的设置成为条件。