在ASP.NET Core 2.2应用程序中,我们已使用app.UseHsts();
启用了HSTS,这将在响应标头中添加max-age
为30天的HSTS。
在提琴手中
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
问题
dynamic_sts_observed
和dynamic_sts_expiry
的单位是什么。看起来好像不到几秒钟。值如何计算?如果用户每天都在访问站点,值是否会不断更新?换句话说,它是到期日滑动吗?
到期后会怎样?
如果用户已经访问该网站并且其浏览器已经缓存了HSTS 30天,将会发生什么情况。但是几天后,我们将值从30天更改为90天。用户的浏览器何时会获得更新的值?到期后还是下次访问?
URL用户浏览已经是
https://subdomain.example.com
之类的子域。我们使用的SSL证书是通配符证书。 *.example.com
。因此,HSTS配置是否需要包括Subdomain?像
Strict-Transport-Security: max-age=2592000, includeSubDomain
最佳答案
Unix纪元时间(即自1970年1月1日起)的秒数。如Joachim的commebt所言,您可以在此处查看和转换它:https://www.unixtimestamp.com/index.php
是。
好像您从未看到过HSTS标头(即不会强制执行HTTPS)。
在下一次按2进行访问后,它是一个滑动到期时间,每次访问都会重新计算一次。
如果该策略处于最高级别,则需要使用includeSubDomains
(注意,您在问题中未填写S时应加上S),以使其影响子域。您还可以在每个子域上发布单独的策略(相同或不同的策略)。仅当访问者访问该站点(例如https://example.com)时才加载顶级策略,因此,如果访问者仅访问子域(例如https://www.example.com),则浏览器将不会缓存该顶级策略。最佳做法是在所有策略上使用includeSubDomains
并从顶级域加载资产(例如单个像素或公司徽标),以强制采用该顶级策略,以便所有其他子域也受保护。仅当您没有任何仅使用HTTP的网站(例如http://intranet.example.com或http://blog.example.com)时,这种方法才有用,在这种情况下,您能做的最好的事情就是拥有一个不带includeSubDomains
的顶级策略,然后对每个策略使用不同的策略完全支持带有includeSubDomains
的HTTPS的子域。该证书与HSTS没有任何关系(事实证明,每个受保护的域显然都需要一个证书!)。