我们希望对我们的IIS部署的Web应用程序启用HSTS。
我们有SSL终止ELB应用程序负载平衡器。我们已经在IIS中启用了URL重写模块,并配置了x-Forward-Proto标记来决定并启用响应中的HSTS标头。
当前,ALB似乎没有将自定义标头从IIS传递到ALB,再传递给最终用户。我们想看看是否有一种方法可以在允许接受自定义标头的ALB级别启用HSTS,还是可以在IIS级别设置HSTS并使ALB可以通过HSTS标头传递到浏览器?
答案 0 :(得分:3)
HSTS是由后端而不是由负载均衡器控制的策略。有人可能会说AWS可以做到这一点,但是还有其他一些问题使事情变得更加复杂(违反规范,HTTP的永久重定向等)
HSTS的问题在于您不能(不应)通过HTTP发送严格传输安全性。规范说只能通过安全连接发送标头。 HTTP不安全。由于负载平衡器正在通过HTTP与后端通信,因此IIS不会发送标头。您需要在后端使用HTTPS来启用HSTS。
如果您的目标是向客户端发送“严格的传输安全性”,请在负载均衡器上使用第4层侦听器,并在后端处理HTTPS。如果请求通过HTTP到达,则发送永久重定向(301)。好处包括绝对控制,改进的HTTP / 2等。
另一个选择是更改您的侦听器,以使用HTTPS与后端通信。在后端设置HTTPS和SSL。
答案 1 :(得分:2)
听起来这是OP所使用的方法,但是由于某些原因没有传递标头。我只想确认这种方法确实可行,并提供其他详细信息。
完全有可能通过HTTP在后端服务器上设置HSTS标头。最终,它只是一个头文件,服务器将很高兴地发送它。
但是,根据HSTS规范,浏览器将忽略HTTP响应上收到的HSTS标头。
但是,有一种方法可以使其工作,首先,您将后端服务器配置为发送HSTS标头。
然后,假设应用程序负载平衡器正在侦听HTTPS,但是您的目标组(和后端服务器)在HTTP上,则会发生以下情况:
因此,浏览器通过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
请求标头值使标头的设置成为条件。