Apache 2.4 - 禁用 HSTS 标头

sim*_*mon 8 apache-2.4 hsts ubuntu-18.04

我已经使用 Ubuntu 18.04 设置了一个 Vagrant 框并安装了 Apache 2.4.29。我创建并启用了一个新的 conf 文件,如下所示:

<VirtualHost *:80>
    ServerName django.dev
    ServerAlias www.django.dev
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我尝试调用 django.dev 时,apache 以 HSTS 标头响应:

HSTS 响应头

我不知道这是从哪里来的。在 apache2.conf 和 000-default.conf 中都没有设置这样的标头,我什至没有启用 mod_ssl。

奇怪的是,如果直接调用 IP,一切都按预期进行。如果我 ping django.dev,它会解析为完全相同的 IP。

有谁知道我可以如何或在哪里禁用 HSTS?我不知所措,已经浪费了几个小时试图解决这个问题。

Esa*_*nen 11

HSTS 策略由浏览器缓存max-age指令中指定的秒数( RFC 6797, 6.1.1 )。从 Web 服务器配置中删除标头不会从缓存中删除策略(也不会从预加载列表中删除,如果提交给一个列表),因此它会继续307 Internal Redirect在每个已经缓存策略的浏览器上导致s。

RFC 6797, 5.3 中所述

只有给定的 HSTS 主机可以更新或可以导致删除其发布的 HSTS 策略。它通过Strict-Transport-Security向 UA发送带有策略持续时间和子域适用性的新值的 HTTP 响应头字段来实现这一点 。因此,UA 代表 HSTS 主机缓存“最新”的 HSTS 策略信息。指定零持续时间通知 UA 删除该 HSTS 主机的 HSTS 策略(包括任何断言的 includeSubDomains 指令)。

因此,删除 HSTS 策略的唯一方法是设置 HSTS 标头的持续时间为零,并且浏览器还必须在安全连接上看到此标头,没有任何 TLS 错误或警告 ( 2.2 )。

<VirtualHost *:443>
    . . .
    Header always set Strict-Transport-Security "max-age=0"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果直接调用 IP,一切都按预期进行。

这一点也不奇怪。如附录 A 所述

  1. HSTS 主机仅通过域名识别——不包括所有形式的显式 IP 地址识别。这是为了简化,也是为了认识到使用直接 IP 地址识别与基于 PKI 的安全性相关的各种问题。

你不能禁用 HSTS .dev

如果这实际上是一个.dev,则无法禁用 HSTS。

您的安全是我们的首要任务。这 。dev顶级域包含在 HSTS 预加载列表中,这使得到 . dev网站和页面,无需单独的 HSTS 注册或配置。安全性是内置的。

  • 永远不要尝试发明自己的 TLD!如果它们当前未使用,将来可能会使用。 (3认同)