如果已经存在 http 到 https 重定向,为什么需要 HSTS header?

Why HSTS header is required if http to https redirect is already present?

我们在 AWS ALB 后面有一个网络服务器 运行,在 ALB 上有一个 AWS CloudFront in-front。 我们在 CDN 和 ALB 中都设置了强制 http->https 重定向。

  1. 我们还需要配置 HSTS header 吗?

  2. 当我们启用强制 https 重定向时,如果我们不设置 HSTS 有什么缺点?

考虑以下攻击(ssl 剥离)。

  1. 用户在浏览器中输入“example.com”。
  2. 浏览器向http://example.com发送请求。
  3. 重定向到 https://
  4. 浏览器请求 https://example.com 一切正常,对吧?

如果浏览器和这些网站之间夹了一个人怎么办? HTTPS 防止中间人,所以他们什么也做不了对吗?

  1. 用户在浏览器中输入“example.com”。
  2. 浏览器向http://example.com发送请求。
  3. 攻击者劫持此请求并响应任意内容(例如,看起来像真实内容的内容)。
  4. 用户输入 example.com 并得到类似的东西 - 用户很高兴,但正在查看恶意页面,在普通 http 上。攻击者甚至可以代理真实页面,用 http 替换所有 https 引用,并从 https 站点提供适当的内容,在这种情况下,https 连接将在攻击者和 https 服务器之间,而不是用户和 https 服务器之间。

当然,如果用户具有安全意识并注意的话,他们可以发现这一点。现代浏览器现在警告不安全(=非 https)页面等。最佳做法仍然是在 https 上发出第一个请求,所以这一切都是不可能的(因为攻击者无法为 https://example.com 伪造有效证书),而这正是 HSTS 所实现的。