为什么SSL实验室测试说当通过HTTP发送头时启用HSTS,而不是通过HTTPS发送头时启用HSTS?

为什么SSL实验室测试说当通过HTTP发送头时启用HSTS,而不是通过HTTPS发送头时启用HSTS?,http,ssl,encryption,https,hsts,Http,Ssl,Encryption,Https,Hsts,我正在尝试在我的服务器上配置HST。我注意到,SSLLabs.com上的测试将告诉我,如果我通过初始未加密的HTTP连接发送HSTS头,则HSTS已启用。然而,这违反了RFC-6797第7.2节规定的HSTS规范,该规范明确规定,您不应通过未加密的连接发送此标头 另一方面,如果我的服务器只是在执行了从HTTP到HTTPS的302重定向之后才发送该HSTS头,这正是官方HSTS规范所说的,那么SSL实验室不承认我启用了HSTS 那么我在这里错过了什么?真正正确的方法是什么 如果你想知道我在说什么

我正在尝试在我的服务器上配置HST。我注意到,SSLLabs.com上的测试将告诉我,如果我通过初始未加密的HTTP连接发送HSTS头,则HSTS已启用。然而,这违反了RFC-6797第7.2节规定的HSTS规范,该规范明确规定,您不应通过未加密的连接发送此标头

另一方面,如果我的服务器只是在执行了从HTTP到HTTPS的302重定向之后才发送该HSTS头,这正是官方HSTS规范所说的,那么SSL实验室不承认我启用了HSTS

那么我在这里错过了什么?真正正确的方法是什么


如果你想知道我在说什么,这个网站是 夜猫子马戏团艺术网

您可以使用curl和以下bash命令查看未加密的标题:

curl -I http://www.nightowlcircusarts.com/
或者将http更改为https以查看加密的标题:

curl -I https://www.nightowlcircusarts.com/
目前,我已经将其配置为仅通过TLS发送该报头,而不是像HSTS规范所说的那样不发送该报头。但您会看到SSL实验室测试仍然显示我没有启用HST:

首先,SSLLAB不会扫描未加密连接上的站点-仅扫描加密连接(https)上的站点。因此,它不会告诉您在http上启用了它

您的问题是,NightowlCircuarts.com和www.nightowlCircuarts.com是两个不同的网站,您只在后者上设置它,但在前者上扫描它:

现在,扫描结果显示,在底部,裸域确实重定向到www版本,但ssllabs的任务是测试SSL/TLS连接(在重定向之前发生),因此它故意不遵循重定向,而是报告SSL/TLS连接配置。它希望您单独扫描重定向站点-正是针对这样的用例,在这些用例中,您的设置不同

我猜当你“通过初始未加密的HTTP连接发送HSTS头”时,你实际上是在任何地方设置它(包括https上的裸域),这就是为什么你认为它“有效”的原因

允许(并且预期!)将https上的HST设置为https重定向。事实上,我们已经介绍了你的具体例子

顺便说一句,将HST添加到裸域是最佳实践,但请确保您的整个域仅通过https提供服务。如果您有一个子网站(例如blog.example.com),或者还将其用于尚未保护的非公共网站(例如intranet.example.com),则这可能会导致问题。在这种情况下,您可以将HST添加到裸域中,但不使用includeSubdomain选项,尽管这不会为您提供HST的完全保护

最后,如果检查一个站点的各种安全头而不是SSL/TLS配置,那么这是一个很棒的站点,并且比ssllabs执行的整套SSL/TLS测试要快得多:


请注意,这两个站点检查不同的内容,因此其中一个站点不是另一个站点的替代站点(这两个站点都很喜欢!),但是一些设置(HST和HPKP)都由这两个站点显示。在这个问题上,要非常小心使用HPKP(我不是一个粉丝,也不认为它应该被广泛使用)。

在测试的“溺水”部分,尝试访问此测试的较长解释以及显示个别问题的位置,单击更多信息链接,他们应该帮你找到正确的方向。我不明白你为什么这么想。下面是正确答案。