如何在 Apache 2.4 中禁用 HSTS 标头?

如何在 Apache 2.4 中禁用 HSTS 标头?

我已经使用 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>

由于某种原因,当我尝试调用 django.dev 时,apache 会使用 HSTS 标头进行响应:

HSTS 响应标头

apache2.conf我不知道这是怎么回事。在和 中都没有设置这样的标头,000-default.conf我甚至没有mod_ssl启用它。

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

有人知道我该如何或在哪里禁用 HSTS 吗?我很困惑,已经浪费了好几个小时来解决这个问题。

答案1

浏览器会缓存 HSTS 策略,缓存时间是指令中指定的秒数max-ageRFC 6797, 6.1.1)。从 Web 服务器配置中删除标头并不会从缓存中删除策略(也不会从预加载列表(如果已提交给缓存)中删除),因此它会继续导致307 Internal Redirect每个已缓存该策略的浏览器出现问题。

RFC 6797, 5.3

只有指定的 HSTS 主机可以更新或删除其发布的 HSTS 策略。它通过向 Strict-Transport-SecurityUA 发送 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>

奇怪的是,如果直接调用 IP,一切都会按预期工作。

这并不奇怪。正如附录 A

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

您无法禁用 HSTS.dev

如果这实际上是.dev领域,您无法禁用 HSTS。

您的安全是我们的首要任务。.dev顶级域名包含在 HSTS 预加载列表中,因此所有到 .dev网站和页面的连接都需要 HTTPS,而无需单独注册或配置 HSTS。安全性是内置的。

相关内容