我有一個網站,用戶可以在其中為該網站創建無限的子域。
我們的一位客戶希望我們在標頭上啟用 HSTS,因此我在 .htaccess 中添加了以下規則:
Header set Strict-Transport-Security "max-age=63072000; includeSubDomains"
我們有一個通配符證書*.domain.com來保護所有子域,因為我們不想為每個子域制作一個單獨的證書。
問題是當有人要去時,www.subdomain.domain.com他們需要被重定向到subdomain.domain.com.
但是 Chrome 正在阻止重定向,因為某個*.*.domain.com級別上沒有有效的證書,并且 HSTS 規則使 Chrome 完全阻止重定向并出現NET::ERR_CERT_COMMON_NAME_INVALID錯誤。
.htaccess 重要的一部分:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,QSA,NC,L]
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,QSA,R=301,L]
Header set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set Cache-Control "no-store, no-cache, must-revalidate"
我原以為 www 到非 www 的重定向會首先進行,因為它在 .htaccess 檔案中更高。
uj5u.com熱心網友回復:
...并且 HSTS 規則使 Chrome 完全阻止重定向并出現
NET::ERR_CERT_COMMON_NAME_INVALID錯誤
這與 HSTS 無關。該錯誤是“因為某個*.*.domain.com級別沒有有效的證書”。在嘗試實施 HSTS 之前,您會遇到同樣的錯誤。(除非您只通過 HTTP 測驗過 www 子域?!)
沒有捷徑可走。如果您需要通過 HTTPS 訪問 www 子域,那么您需要一個涵蓋該主機名的有效安全證書。
我原以為 www 到非 www 的重定向會首先進行,因為它在 .htaccess 檔案中更高。
這NET::ERR_CERT_COMMON_NAME_INVALID是在 SSL 握手期間發生的瀏覽器錯誤。這一切都發生在 .htaccess甚至處理之前(在傳輸任何資料之前)。
旁白:雖然你真的需要一個 www 子域嗎?
uj5u.com熱心網友回復:
如果您不想在 www 子域上啟用 HSTS,則需要<If>在標題周圍放置一個陳述句,而不是includeSubDomains在您的 HSTS 規則中使用。
如果沒有<If "%{HTTP_HOST} != 'www.sub.example.com'>周圍的Header指令為HSTS,該頭將為該子域的.htaccess檔案發送,無論規則的秩序。
當您includeSubDomains在您的 HSTS 規則中使用時,HSTS forwww.sub.example.com將在您訪問sub.example.com甚至example.com.
現在您已經為該 www 子域啟用了 HSTS,您無法為已經訪問過您站點的瀏覽器撤銷它。此時,您最好的做法是獲取涵蓋 www 子域的證書。您可能可以將 at 添加到現有證書中作為主題備用名稱 (SAN)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/358462.html
上一篇:通過對大表的操作來加速組
下一篇:除特定檔案夾外,強制尾隨斜杠
