Apache-2.4

Apache 2.4 - 禁用 HSTS 標頭

  • April 11, 2020

我用 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,一切都會按預期工作。如果我 ping django.dev 它被解析為完全相同的 IP。

有誰知道我如何或在哪裡可以禁用 HSTS?我很茫然,已經浪費了幾個小時試圖解決這個問題。

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>

奇怪的是,如果直接呼叫 IP,一切都會按預期工作。

這一點也不奇怪。如附錄 A中所述,

  1. HSTS 主機僅通過域名辨識——所有形式的明確 IP 地址辨識被排除在外。這是為了簡化,也是為了認識到將直接 IP 地址辨識與基於 PKI 的安全性結合使用的各種問題。

您無法禁用 HSTS.dev

如果這實際上是一個.dev,則不能禁用 HSTS。

您的安全是我們的首要任務。這 。dev頂級域包含在 HSTS 預載入列表中,因此所有與 . dev網站和頁面,無需單獨的 HSTS 註冊或配置。安全性是內置的。

引用自:https://serverfault.com/questions/1011861