我有一个使用自签名证书提供 HTTPS 服务的本地服务器。它不提供 http 服务。证书颁发时使用 cn=host1.subdomain1.domain1。该服务器也可以通过名称 host2 访问。如果我打开https://host2我收到警告,但我可以为证书定义例外并可以访问服务器内容。服务器没有并且从未返回 HSTS 标头。如果我通过以下方式访问服务器https://host1.subdomain1.domain1,Firefox 发出 HSTS 警告并且不允许例外。domain1 或 subdomain1.domain1 的服务器可能发送了 HSTS 标头。它们可能也适用于子域。
但是:即使清除历史记录和 about:permissions 条目后,行为仍然相同。那么,HSTS 信息来自哪里?
答案1
HSTS 标头可以指示浏览器使用 来包含子域includeSubDomains
。浏览器还可能包含使用 HSTS 的域的预加载列表。
网站可以使用以下内容指定为期六个月且包含子域名的 HSTS:
Strict-Transport-Security: max-age=15768000; includeSubDomains
这样做的效果正如你问题中描述的一样。这里的关键是
includeSubDomains
标题行末尾的。请注意,大多数主流浏览器的当前版本都保留内部网站列表已知它们使用 HSTS,因此即使第一次连接到特定域时也会要求 HTTPS 连接。也可以看看:OWASP 关于 HTTPS 严格传输安全。