当前位置:首页 > 云服务器 > 正文

HTTP严格传输安全协议怎么查看配置?HSTS配置检查方法

HTTP 严格传输安全(HSTS, HTTP Strict Transport Security)是一种 Web 安全策略机制,它允许 Web 服务器声明浏览器或其他可接受客户端只能使用 HTTPS 连接来访问该资源,配置 HSTS 的核心在于 HTTP 响应头中的 Strict-Transport-Security 字段。

要正确查看和评估 HSTS 配置,我们需要深入解析该头部的各个参数,并通过工具验证其生效情况,以下是详细的配置查看指南。

核心配置参数解析

Strict-Transport-Security 头部的格式通常如下:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

我们需要关注以下三个关键参数:

参数名 说明 建议配置值/状态
max-age 指定浏览器应将此策略保持多长时间(以秒为单位),在此期间,浏览器将自动将所有 HTTP 请求转换为 HTTPS。 至少 31536000 秒(1年),较短的时间(如几天)无法提供长期保护,且容易因过期导致用户再次遭遇降级攻破。
includeSubDomains 可选参数,如果存在,该策略不仅适用于当前主机,还适用于所有子域名。 强烈建议启用,防止攻破者通过未配置 HSTS 的子域名(如 dev.example.com)发起中间人攻破,进而威胁主域名。
preload 可选参数,如果存在,表示网站所有者希望将域名列入浏览器的 HSTS 预加载列表中。 仅在确认完全准备好后启用,一旦列入预加载列表,即使浏览器首次访问也是 HTTPS,且极难移除,需确保所有子域名也支持 HTTPS。

如何查看 HSTS 配置

通过浏览器开发者工具查看

这是最直接的方法,适用于检查当前正在访问的网站。

HTTP严格传输安全协议怎么查看配置?HSTS配置检查方法 第1张

  1. 在浏览器中打开目标网站(确保是 HTTPS 连接)。
  2. 按下 F12 或右键点击页面选择“检查”打开开发者工具。
  3. 切换到 Network(网络) 标签页。
  4. 刷新页面,在请求列表中找到第一个请求(通常是文档请求,Type 为 document)。
  5. 点击该请求,在右侧面板中找到 Response Headers(响应头)
  6. 查找 Strict-Transport-Security 字段。

示例输出:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

解读:该网站设置了 2 年的有效期,包含子域名,并申请了预加载。

通过命令行工具查看

使用 curl 命令可以清晰地看到服务器返回的所有头部信息。

HTTP严格传输安全协议怎么查看配置?HSTS配置检查方法 第2张

输出示例:

HTTP/2 200 date: Mon, 01 Jan 2024 00:00:00 GMT content-type: text/html; charset=utf-8 strict-transport-security: max-age=31536000; includeSubDomains ...

如果返回结果中没有 strict-transport-security 字段,则说明该网站未配置 HSTS。

使用在线安全扫描工具

对于批量检查或更详细的分析,可以使用以下工具:

  • SSL Labs (Qualys): 访问 https://www.ssllabs.com/ssltest/,输入域名,在报告中的 “Security Practices” 部分,会明确列出 HSTS 的状态、max-age 值以及是否包含子域名。
  • Mozilla Observatory: 提供详细的 Web 安全配置审计,包括 HSTS 的合规性检查。

常见配置错误与最佳实践

在查看配置时,需警惕以下常见问题:

  • max-age 过短:max-age 小于 10886400 秒(125天),不符合 Mozilla 的 HSTS 预加载要求,且保护力度较弱。
  • 缺少 includeSubDomains:这会导致攻破者可以利用未配置 HSTS 的子域名进行中间人攻破,从而窃取主域名的会话 Cookie。
  • 过早启用 preload:如果网站尚未完全迁移到 HTTPS,或者存在不支持 HTTPS 的子域名,提前启用 preload 会导致用户无法访问网站。
  • HTTP 页面未重定向:HSTS 仅告诉浏览器“下次访问时用 HTTPS”,它本身不会将当前的 HTTP 请求重定向到 HTTPS,服务器必须同时配置 HTTP 到 HTTPS 的 301 重定向。

HSTS 预加载列表(Preload List)

启用 preload 参数后,网站管理员需要手动将域名提交到浏览器的 HSTS 预加载列表中,目前主要支持 Chrome (Google)、Firefox (Mozilla) 和 Safari (Apple)。

HTTP严格传输安全协议怎么查看配置?HSTS配置检查方法 第3张

  • 提交地址
    • Google: https://hstspreload.org/
    • Mozilla: https://addons.mozilla.org/en-US/firefox/addon/hstspreload/ (或通过 https://hstspreload.org/ 统一入口)

注意:一旦域名被加入预加载列表,即使浏览器清除了缓存,也会强制使用 HTTPS,如果配置错误(如证书过期),用户将无法访问网站,直到列表更新或域名被移除(移除过程可能需要数周)。


相关问题与解答

问题 1:如果我在 HSTS 头中设置了 max-age=0,会发生什么?

解答:

设置 max-age=0 是一种特殊的指令,用于删除之前设置的 HSTS 策略,如果浏览器之前已经缓存了该域名的 HSTS 策略,当它收到 max-age=0 的响应头时,会立即清除该缓存,这通常用于测试环境或当网站暂时无法提供 HTTPS 服务时,以避免用户因强制 HTTPS 而无法访问,但在生产环境中,这等同于禁用了 HSTS 的保护,应谨慎使用。

问题 2:HSTS 能防止所有类型的中间人攻破吗?

解答:

不能完全防止,HSTS 主要防止的是协议降级攻破(即攻破者将 HTTPS 请求强制转换为 HTTP)和证书欺骗攻破(在首次连接时),HSTS 无法防止以下情况:

  1. 用户首次访问:如果用户第一次访问网站,且尚未缓存 HSTS 策略,攻破者仍可能拦截首次 HTTP 请求并返回恶意证书,必须配合 HTTP 到 HTTPS 的 301 重定向使用。
  2. 恶意软件或企业代理:如果用户的设备上安装了恶意软件,或者企业网络部署了中间人代理(如某些公司防火墙会自签证书并安装根证书),HSTS 无法阻止这些本地或网络层的拦截。
  3. DNS 截持:DNS 被截持指向恶意服务器,且该服务器提供有效的 HTTPS 证书(或通过其他手段欺骗),HSTS 本身无法识别 DNS 层面的错误,除非结合 DNSSEC 使用。

0