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

配置 HSTS

最近更新时间2023.05.16 17:41:34

首次发布时间2023.05.16 17:41:34

视频点播支持在域名管理的协议配置中配置 HSTS。开启后,CDN 将会响应 HSTS 头部:Strict-Transport-Security,可以强制客户端使用 HTTPS 与 CDN 节点建连,建议同时配置 HTTP 强制跳转到 HTTPS。本文为您介绍 HSTS 配置的功能介绍和操作步骤等内容。

适用范围

HSTS 配置适用于自定义源站加速域名。

功能介绍

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

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

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

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

强制跳转的局限

在您配置强制跳转后,如果浏览器向视频点播发送了一个 HTTP 请求,视频点播会返回 301 或者 302 响应状态码通知浏览器将 HTTP 请求跳转到 HTTPS 请求。关于更多强制跳转的信息,参见强制跳转

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

HSTS 的优势

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

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

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

  • 浏览器已缓存了 Strict-Transport-Security 响应头。
  • 已缓存的响应头未过期。关于 Strict-Transport-Security 响应头的缓存有效时间,参见下方操作步骤中的说明。

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

说明

当您在视频点播控制台中启用 HSTS 时,视频点播会提示您是否需要启用强制跳转的配置,参见操作步骤

浏览器与视频点播的交互过程

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

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

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

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

注意

  • 如果缓存的 Strict-Transport-Security 响应头已过期,当该用户向视频点播发送 HTTP 请求时,会重复浏览器与视频点播的交互过程中描述的步骤。

  • 需要注意的是,即使您已启用了 HSTS 与强制跳转,视频点播收到的 HTTP 请求是无法避免的。因为在以下任意情况下,浏览器不会将 HTTP 转换成 HTTPS:

    • 浏览器缓存中不存在 Strict-Transport-Security 响应头。
    • 浏览器缓存中的 Strict-Transport-Security 响应头已过期。

前提条件

该加速域名已开启 HTTPS

操作步骤

  1. 登录火山引擎视频点播控制台,进入空间。

  2. 单击左侧导航栏分发加速设置 > 域名管理,进入域名管理页面。

  3. 选择自定义源站加速域名页签,在域名列表中找到您需要配置的域名,单击操作列的配置按钮。

  4. 进入加速域名配置页面,选择协议配置页签。

  5. 单击页面下方的修改配置按钮。HSTS 配置默认关闭。您可以在 HSTS 配置下方,将状态设为开启。开启后,支持设置过期时间和子域名。

    注意

    HTTP 请求时,客户端不会进行 HSTS 缓存。建议同时设置 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 响应头,浏览器会使用收到的响应头的过期时间来替换缓存的响应头的过期时间。

    子域名

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

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

    注意

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

    举例

  • 例子 1:您指定过期时间是 6 秒并且包含子域名。此时,视频点播实际返回的响应头如下:

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

    • Strict-Transport-Security: max-age=86400
  1. 完成配置后,单击保存配置按钮。

如何在浏览器中管理 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 分钟的延时。