我已经使用 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 标头进行响应:
apache2.conf
我不知道这是怎么回事。在和 中都没有设置这样的标头,000-default.conf
我甚至没有mod_ssl
启用它。
奇怪的是,如果直接调用 IP,一切都会按预期工作。如果我 pingdjango.dev
它会解析为完全相同的 IP。
有人知道我该如何或在哪里禁用 HSTS 吗?我很困惑,已经浪费了好几个小时来解决这个问题。
答案1
浏览器会缓存 HSTS 策略,缓存时间是指令中指定的秒数max-age
(RFC 6797, 6.1.1)。从 Web 服务器配置中删除标头并不会从缓存中删除策略(也不会从预加载列表(如果已提交给缓存)中删除),因此它会继续导致307 Internal Redirect
每个已缓存该策略的浏览器出现问题。
只有指定的 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>
奇怪的是,如果直接调用 IP,一切都会按预期工作。
这并不奇怪。正如附录 A,
- HSTS 主机仅通过域名进行识别 - 排除所有形式的显式 IP 地址识别。这是为了简化,也是为了认识到使用直接 IP 地址识别与基于 PKI 的安全性相结合的各种问题。
您无法禁用 HSTS.dev
如果这实际上是.dev
领域,您无法禁用 HSTS。
您的安全是我们的首要任务。.
dev
顶级域名包含在 HSTS 预加载列表中,因此所有到 .dev
网站和页面的连接都需要 HTTPS,而无需单独注册或配置 HSTS。安全性是内置的。