HSTS理解

HSTS understanding

我对 HSTS 机制很感兴趣,想澄清一下:

例如,有站点 https://example.com exists. I use chrome://net-internals/#hsts 可以检查那里是否启用了 HSTS。并显示下一个信息:

static_sts_domain: 
static_upgrade_mode: UNKNOWN
static_sts_include_subdomains: 
static_sts_observed: 
static_pkp_domain: 
static_pkp_include_subdomains: 
static_pkp_observed: 
static_spki_hashes: 
dynamic_sts_domain: example.com
dynamic_upgrade_mode: FORCE_HTTPS
dynamic_sts_include_subdomains: true
dynamic_sts_observed: 1524145911.957196
dynamic_sts_expiry: 1555681911.957194
dynamic_pkp_domain: 
dynamic_pkp_include_subdomains: 
dynamic_pkp_observed: 
dynamic_pkp_expiry: 
dynamic_spki_hashes:

所以我期望并认为那里启用了 HSTS。但同时没有Strict-Transport-Securityheader回应。为什么 chrome 显示此类信息并且是否为该站点启用了 HSTS?

But at the same moment there is no Strict-Transport-Security header in response.

它一定是在某个时候存在的,因为动态条目已添加到您的 Chrome.

实例中

另请记住,HSTS 可以在任何资源上发送,而不仅仅是主文档。因此,如果您将其发送到徽标资源上,那么将为整个域设置它。

您可以使用相同的 chrome://net-internals/#hsts 页面清除它,看看它在浏览后是否恢复正常?如果是这样,那么某些东西仍在发送它,如果不是,那么可能是该网站曾经宣传 HSTS 但现在不再这样做了。

它被设置为有效一年:

(1555681911.957194 - 1524145911.957196) / 365 / 24 / 60 = 1 year

根据我尝试转换这些日期戳的粗略计算,它看起来像是最后一次设置在 2018 年 4 月 20 日。

如果网站确实停止使用 HSTS,无论出于何种原因,最好宣传 0 header,这样至少现在通过 HTTPS 访问的访问者将删除该政策:

Strict-Transport-Security: max-age=0; includeSubDomains

任何不通过 HTTPS 访问的人在它过期之前都不会被清除。

HSTS 表示 HTTP 严格传输安全。当您拥有 HSTS 支持时,它不允许在使用 301 重定向之前将站点初始堆叠在 HTTP 中。这意味着任何程序员都没有时间潜入并将其与 HTTP 一起使用并防止站点堆叠 HTTPS。 HSTS 允许站点仅在 HTTPS 中堆叠,为您的站点提供额外的安全层。此安全层告诉程序该站点具有 HTTPS 保证,并且没有令人信服的理由尝试以 HTTP 访问该站点。这将关闭程序员在 301 重定向期间获得的小 window。 请参阅以下步骤:

详细了解超文本协议和HSTS支持click here