我们希望在部署了IIS的web应用程序中启用HSTS。
我们有SSL终止ELB应用程序负载均衡器。我们已经在IIS中启用了URL重写模块,并配置了x-Forward-Proto标签来决定和启用响应中的HSTS报头。
目前,ALB似乎不会将自定义报头从IIS传递到ALB,再传递给最终用户。我们想看看是否有一种方法可以在ALB级别启用HSTS,在ALB级别可以接受自定义标头,或者是否可以在IIS级别设置HSTS,ALB可以通过HSTS标头传递到浏览器?
发布于 2018-08-18 17:00:31
HSTS是由后台控制的策略,而不是由负载均衡器控制的策略。有人可能会争辩说AWS可以实现这一点,但还有其他问题使这变得更加复杂(违反规范,HTTP的永久重定向,等等)
HSTS的问题是您不能(不应该)通过HTTP发送严格传输安全。说明书上说只通过安全连接发送报头。HTTP不安全。由于负载平衡器通过HTTP与后端通信,因此IIS不会发送标头。需要在后台使用HTTPS才能开启HSTS。
如果您的目标是向客户端发送"Strict-Transport-Security“,请在负载均衡器上使用四层监听器,并在后端处理HTTPS。如果请求通过HTTP到达,则发送永久重定向(301)。好处包括绝对控制、改进的HTTP/2等。
另一种选择是将监听器更改为使用HTTPS与后端对话。在后台设置HTTPS和SSL。
发布于 2020-03-06 01:44:49
这听起来像是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
请求标头的值对标头进行有条件的设置。
https://stackoverflow.com/questions/51906676
复制相似问题