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 標頭響應:
我不知道這是從哪裡來的。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中所述,
- HSTS 主機僅通過域名辨識——所有形式的明確 IP 地址辨識被排除在外。這是為了簡化,也是為了認識到將直接 IP 地址辨識與基於 PKI 的安全性結合使用的各種問題。
您無法禁用 HSTS
.dev
如果這實際上是一個
.dev
域,則不能禁用 HSTS。您的安全是我們的首要任務。這 。
dev
頂級域包含在 HSTS 預載入列表中,因此所有與 .dev
網站和頁面,無需單獨的 HSTS 註冊或配置。安全性是內置的。