You need to enable JavaScript to run this app.
导航

HSTS 配置

最近更新时间2024.03.15 16:06:52

首次发布时间2024.03.15 16:06:52

veImageX 支持您通过对域名启用 HSTS(HTTP Strict Transport Security)功能,来强制客户端(例如:浏览器)使用 HTTPS 协议与 veImageX-CDN 节点创建连接,从而降低用户的第一次访问请求被恶意拦截的风险。

背景信息

HSTS(HTTP Strict Transport Security)是一种网络安全的策略机制,目的是保护用户在访问 HTTPS 站点的期间免受降级攻击和 cookie 劫持。在您对站点启用 HSTS 后,站点的响应中会包含 Strict-Transport-Security 响应头。Strict-Transport-Security 响应头告知浏览器其向站点发送的每个请求都必须使用 HTTPS 协议。

Strict-Transport-Security 响应头还包含两个参数,具体如下表所示。

参数说明
max-ageHSTS Header 的过期时间,配置范围为 0~365 天,单位为秒。
includeSubDomains可选参数。如果包含这个参数,说明该域名及其所有子域名均开启HSTS。

HSTS 与强制跳转的区别和联系

HTTP 是一个不安全的协议。当用户在浏览器中指定 HTTP 协议向一个站点发送请求时,该请求可能会被劫持并重定向到恶意站点。为了避免 HTTP 请求访问加速域名,veImageX 提供了以下两个配置:

  • 强制跳转。在启用强制跳转后,您需要设置 跳转类型 为 HTTP 到 HTTPS
  • HSTS。

强制跳转的局限

在您配置强制跳转后,如果浏览器向 veImageX 发送了一个 HTTP 请求,veImageX 会返回 301 或者 302 响应状态码通知浏览器将 HTTP 请求跳转到 HTTPS 请求。

但即使您配置了强制跳转,用户依然可以在浏览器中指定 HTTP 协议向 veImageX 发送 HTTP 请求。虽然会被跳转到 HTTPS 请求,这些 HTTP 请求在到达 veImageX 前依然有被劫持的风险。

HSTS 的优势

相比强制跳转,HSTS 提供了一个更安全的方案。在您为加速域名启用 HSTS 后,veImageX 的响应中会包含 Strict-Transport-Security 响应头。如果浏览器成功使用 HTTPS 协议对 veImageX 发送过一次请求,浏览器就会缓存该响应头。假设之后用户再次在浏览器中指定 HTTP 协议访问 veImageX。在发送请求前,浏览器会将 HTTP 转换成 HTTPS。由于转换过程在浏览器侧发生,就能极大降低浏览器向 veImageX 发送的 HTTP 请求的数量。同时,也降低了 HTTP 请求被劫持的风险。

HSTS 响应头起作用的前提条件

虽然 HSTS 方案更安全,但是要使浏览器遵循 Strict-Transport-Security 响应头将 HTTP 转换成 HTTPS,以下条件必须满足:

  • 浏览器已缓存了 Strict-Transport-Security 响应头。
  • 已缓存的响应头未过期。关于 Strict-Transport-Security 响应头的缓存有效时间,参见配置说明

在加速域名启用了 HSTS 后,veImageX 在响应任何请求时都会返回 Strict-Transport-Security 响应头。但要使浏览器缓存该响应头,浏览器必须成功使用 HTTPS 协议向 veImageX 发送过一次请求。因此,在您启用 HSTS 时,推荐您也启用强制跳转并设置 跳转类型 为 HTTP 到 HTTPS

浏览器与 veImageX 的交互过程

在您启用了 HSTS 与强制跳转后,如果用户使用浏览器向 veImageX 发送了一个 HTTP 请求,浏览器与 veImageX 的交互过程如下:

  1. 浏览器检查是否存在已缓存的 Strict-Transport-Security 响应头。
  2. 由于浏览器缓存中不存在该响应头,浏览器向 veImageX 发送该 HTTP 请求。
  3. veImageX 收到该请求后,由于强制跳转的配置,veImageX 的响应状态码是 301 或 302。同时,由于 HSTS 的配置,响应中包含了 Strict-Transport-Security 响应头。此时,由于还未成功使用 HTTPS 协议向 veImageX 发送过一次请求,浏览器不缓存该响应头。
  4. 由于 301 或 302 响应状态码,浏览器向 veImageX 发送 HTTPS 请求。在响应中,veImageX 同样包含了 Strict-Transport-Security 响应头。假设该响应头的有效时间是 10 分钟,并且该 HTTPS 请求成功获取了请求的文件。
  5. 由于 HTTPS 请求成功,浏览器对 Strict-Transport-Security 响应头进行缓存。

在 10 分钟内,假设该用户使用浏览器再次向 veImageX 发送 HTTP 请求。此时,浏览器与 veImageX 的交互过程如下:

  1. 浏览器检查是否存在已缓存的 Strict-Transport-Security 响应头。
  2. 由于浏览器缓存中存在该响应头,浏览器检查该响应头是否已过期。
  3. 由于该响应头未过期,浏览器就将 HTTP 转换为 HTTPS 并向 veImageX 发送该请求。

注意

  • 如果缓存的 Strict-Transport-Security 响应头已过期,当该用户向 veImageX 发送 HTTP 请求时,会重复浏览器与 veImageX 的交互过程中描述的步骤。
  • 需要注意的是,即使您已启用了 HSTS 与强制跳转,veImageX 收到的 HTTP 请求是无法杜绝的。因为在以下任意情况下,浏览器不会将 HTTP 转换成 HTTPS:
    • 浏览器缓存中不存在 Strict-Transport-Security 响应头。
    • 浏览器缓存中的 Strict-Transport-Security 响应头已过期。

前提条件

请确保已对该域名启用 HTTPS 加速,即成功配置 HTTPS 证书。

操作步骤

  1. 登录 veImageX 控制台,单击服务管理。选择相应的图片服务,单击基础配置

  2. 分发配置页签的域名信息中,单击域名的管理按钮。

  3. 在配置页面,单击 HTTPS 配置并进入页面后。单击编辑按钮,启用 HSTS 配置。

    配置项说明

    子域名

    HSTS 配置是否应用于子域名站点。该配置取值如下:

    • 不包含:不应用于子域名站点。
    • 包含:应用于子域名站点。此时,响应头会包含 includeSubDomains 参数。

    注意

    如果您设置 子域名 为 包含,veImageX 返回的响应头是告知浏览器向所有子域名发送的请求也必须使用 HTTPS 协议。此时,子域名站点必须是可以使用 HTTPS 协议访问的。同时,子域名也有 HTTP 强制跳转到 HTTPS 的类似配置。

    过期时间

    Strict-Transport-Security 响应头在浏览器中的缓存过期时间。该配置对应响应头中的 max-age 参数。在发送一个 HTTP 请求前,浏览器会检查其缓存的 Strict-Transport-Security 响应头是否已经过期。如果该响应头已过期,浏览器不会将 HTTP 转换成 HTTPS。支持选择的单位如下所示:

    • 秒:支持设置的时间范围为 [0,31,536,000]
    • 分:支持设置的时间范围为 [0,525,600]
    • 时:支持设置的时间范围为 [0,8760]
    • 天:支持设置的时间范围为 [0,365]

    注意

    • 如果您设置过期时间为 0,其效果等同于禁用 HSTS。
    • 对于浏览器收到的每个响应,如果响应中包含 Strict-Transport-Security 响应头,浏览器会使用收到的响应头的过期时间来替换缓存的响应头的过期时间。
  4. 单击提交按钮,保存当前配置。

配置示例

  • 示例 1:您指定过期时间是 6 秒并且包含子域名。此时,veImageX 实际返回的响应头如下:
    • Strict-Transport-Security: max-age=6;includeSubDomains
  • 示例 2:您指定过期时间是 1 天并且不包含子域名。此时,veImageX 实际返回的响应头如下:
    • Strict-Transport-Security: max-age=86400

其他操作

如何在浏览器中管理 HSTS 配置?

下面以 Google Chrome 和 Microsoft Edge 为例,为您介绍如何在浏览器中管理 HSTS 配置。

在 Chrome 或 Edge 中,访问以下 URL:

  • chrome://net-internals/#hsts

在打开的页面中,您可以:

  • 将一个域名添加到浏览器的 HSTS 缓存中。
  • 从浏览器的 HSTS 缓存中删除指定的域名。
  • 查询一个域名是否存在于浏览器的 HSTS 缓存中。
    • 如果该域名不存在,查询结果是 Not found
    • 如果该域名存在,查询结果会展示该域名的 HSTS 配置信息。在配置信息中,dynamic_sts_observed 表示浏览器缓存该域名的时间,时间格式是 Unix 时间戳。dynamic_sts_expiry 表示该域名在 HSTS 缓存中的过期时间。

在您查询一个域名时,结果数据可能会有 1 分钟的延时。