ssl - HSTS 过期如何运作

标签 ssl https asp.net-core-2.0 hsts

在 ASP.NET Core 2.2 应用程序中,我们使用 app.UseHsts(); 启用了 HSTS,它在响应 header 中添加了 max-age 为 30 天的 HSTS。

在 fiddler

Strict-Transport-Security: max-age=2592000

然后在 Chrome 中,如果我转到 chrome://net-internals/#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: subdomain.example.com //our domain name here  
dynamic_upgrade_mode: FORCE_HTTPS  
dynamic_sts_include_subdomains: false  
dynamic_sts_observed: 1572023505.777819  
dynamic_sts_expiry: 1574615505.777818  

问题

  1. dynamic_sts_observeddynamic_sts_expiry 的单位是什么。它看起来不像是在几秒钟内。值(value)是如何计算的?
  2. 如果用户每天都访问网站,该值是否会不断更新?换句话说,它是滑动到期吗?
  3. 到期后会发生什么?
  4. 如果用户已经访问过网站并且他的浏览器已经将 HSTS 缓存了 30 天,会发生什么情况。但是几天后,我们将值从 30 天更改为 90 天。用户的浏览器何时会获得更新的值?到期后还是下次访问?
  5. 用户浏览的URL已经是子域,如https://subdomain.example.com 我们使用的SSL证书是通配符证书。 *.example.com。那么 HSTS 配置我需要包含子域吗? 像 Strict-Transport-Security: max-age=2592000, includeSubDomain

最佳答案

  1. 它是 unix 纪元时间的秒数(即自 1/1/1970 以来)。正如 Joachim 的评论所述,您可以在此处查看和转换它:https://www.unixtimestamp.com/index.php

  2. 是。

  3. 就好像您从未见过 HSTS header (即不会强制执行 HTTPS)。

  4. 在下一次访问之后,按照 2,这是一个滑动到期,每次访问都会重新计算。

  5. 如果该策略处于顶层,则您需要使用 includeSubDomains(请注意您在问题中遗漏了 S),以影响子域。您还可以在每个子域上发布单独的策略(相同的或不同的)。您的顶级策略仅在访问者访问该站点(例如 https://example.com )时加载,因此如果他们仅访问子域(例如 https://www.example.com ),则浏览器将不会缓存顶级策略。最佳做法是对所有策略使用 includeSubDomains 并从顶级域加载 Assets (例如单个像素或公司 Logo )以强制选择顶级策略,因此所有其他子域也受到保护。这仅在您没有任何仅限 http 的网站(例如 http://intranet.example.comhttp://blog.example.com )时有效,在这种情况下,您能做的最好的事情就是制定没有 includeSubDomains 的顶级政策,然后每个完全支持 HTTPS 的子域的不同策略 includeSubDomains。该证书与 HSTS 无关(除了事实上您显然需要为每个 protected 域提供一个!)。

关于ssl - HSTS 过期如何运作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58563574/

相关文章:

javamail 在工作站上通过 tls 发送,但不在服务器上发送

android - 如何在 Android 中使用 SSL 加密数据?

Java:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

linux - grpc++ 中的 SSL 握手错误(CERTIFICATE_VERIFY_FAILED)

https - 为什么谷歌分析 JavaScript 文件无法加载?

iphone - iOS https认证

multithreading - SVN 结帐可以是多线程的吗?

session Cookie 从未在 asp.net core 中设置

c# - ASP.Net Core 2.1 中的身份 < - 自定义 AccountController

asp.net-core-2.0 - 在 ASP.NET Core 2.0 中上传后如何调整图像大小