本文档介绍如何在火山引擎内容分发网络(CDN)中对加速域名启用 HSTS。
HSTS 的全称是 HTTP Strict Transport Security,是一种网络安全的策略机制。HSTS 的目的是保护用户在访问 HTTPS 站点的期间免受降级攻击和 cookie 劫持。 在您对站点启用 HSTS 后,站点的响应中会包含 Strict-Transport-Security 响应头。Strict-Transport-Security 响应头告知浏览器其向站点发送的每个请求都必须使用 HTTPS 协议。Strict-Transport-Security 响应头还包含两个参数。关于这两个参数的描述,参见 配置说明。
在进一步阐述 HSTS 之前,有必要先解释 HSTS 与强制跳转的区别。
HTTP 是一个不安全的协议。当用户在浏览器中指定 HTTP 协议向一个站点发送请求时,该请求可能会被劫持并重定向到恶意站点。为了避免 HTTP 请求访问加速域名,CDN 提供了以下两个配置:
在您配置强制跳转后,如果浏览器向 CDN 发送了一个 HTTP 请求,CDN 会返回 301 或者 302 响应状态码通知浏览器将 HTTP 请求跳转到 HTTPS 请求。关于更多强制跳转的信息,参见 强制跳转。
但是,即使您配置了强制跳转,用户依然可以在浏览器中指定 HTTP 协议向 CDN 发送 HTTP 请求。虽然会被跳转到 HTTPS 请求,这些 HTTP 请求在到达 CDN 前依然有被劫持的风险。
相比强制跳转,HSTS 提供了一个更安全的方案。在您为加速域名启用 HSTS 后,CDN 的响应中会包含 Strict-Transport-Security 响应头。如果浏览器成功使用 HTTPS 协议对 CDN 发送过一次请求,浏览器就会缓存该响应头。假设之后用户再次在浏览器中指定 HTTP 协议访问 CDN。在发送请求前,浏览器会将 HTTP 转换成 HTTPS。由于转换过程在浏览器侧发生,就能极大降低浏览器向 CDN 发送的 HTTP 请求的数量。同时,也降低了 HTTP 请求被劫持的风险。
虽然 HSTS 方案更安全,但是要使浏览器遵循 Strict-Transport-Security 响应头将 HTTP 转换成 HTTPS,以下条件必须满足:
Strict-Transport-Security 响应头。Strict-Transport-Security 响应头的缓存有效时间,参见 配置说明。在加速域名启用了 HSTS 后,CDN 在响应任何请求时都会返回 Strict-Transport-Security 响应头。但要使浏览器缓存该响应头,浏览器必须成功使用 HTTPS 协议向 CDN 发送过一次请求。因此,在您启用 HSTS 时,推荐您也启用强制跳转并设置 跳转类型 为 HTTP 到 HTTPS。
说明
当您在 CDN 控制台中启用 HSTS 时,CDN 会提示您是否需要启用强制跳转的配置。参见 操作步骤。
在您启用了 HSTS 与强制跳转后,如果用户使用浏览器向 CDN 发送了一个 HTTP 请求,浏览器与 CDN 的交互过程如下:
Strict-Transport-Security 响应头。Strict-Transport-Security 响应头。此时,由于还未成功使用 HTTPS 协议向 CDN 发送过一次请求,浏览器不缓存该响应头。Strict-Transport-Security 响应头。假设该响应头的有效时间是 10 分钟,并且该 HTTPS 请求成功获取了请求的文件。Strict-Transport-Security 响应头进行缓存。在 10 分钟内,假设该用户使用浏览器再次向 CDN 发送 HTTP 请求。此时,浏览器与 CDN 的交互过程如下:
Strict-Transport-Security 响应头。注意
Strict-Transport-Security 响应头已过期,当该用户向 CDN 发送 HTTP 请求时,会重复 浏览器与 CDN 的交互过程 中描述的步骤。Strict-Transport-Security 响应头。Strict-Transport-Security 响应头已过期。要启用 HSTS,您必须已对加速域名已 配置了证书。


配置 | 说明 |
|---|---|
过期时间 | 表示 您最长可以设置的时间是 31,536,000 秒,表示 365 天。如果您设置过期时间为 需要留意的是,对于浏览器收到的每个响应,如果响应中包含 |
子域名 | 表示 HSTS 配置是否应用于子域名站点。该配置取值如下:
注意 如果您设置 子域名 为 应用,CDN 返回的响应头是告知浏览器向所有子域名发送的请求也必须使用 HTTPS 协议。此时,子域名站点必须是可以使用 HTTPS 协议访问的。并且,子域名也要有一个类似配置将访问子域名的 HTTP 请求强制跳转到 HTTPS 请求。 |
举例
Strict-Transport-Security: max-age=6;includeSubDomainsStrict-Transport-Security: max-age=86400下面以 Google Chrome 和 Microsoft Edge 为例,阐述如何在浏览器中管理 HSTS 配置。
在 Chrome 或 Edge 中,访问以下 URL:
chrome://net-internals/#hsts在打开的页面中,您可以:
Not found。dynamic_sts_observed 表示浏览器缓存该域名的时间,时间格式是 Unix 时间戳。dynamic_sts_expiry 表示该域名在 HSTS 缓存中的过期时间。在您查询一个域名时,结果数据可能会有 1 分钟的延时。