Apache-2.2
有沒有辦法在“mod_ssl”之前訪問“mod_rewrite”?
設想:
我有 2 個域:
thinkingmonkey.me
&thinkingmonkey.com
。整個網站都可以在 下訪問https
。從 CA 購買了具有通用名稱的證書thinkingmonkey.me
。對於
http
:
- www.thinkingmonkey.com、 thinkingmonkey.com和 www.thinkingmonkey.me有一個虛擬主機,並使用 mod_rewrite 規則重定向到https://thinkingmonkey.me 。
- thinkingmonkey.me有其獨立的虛擬主機。
- 一切正常。
情況也是如此
https
:
- 即www.thinkingmonkey.com、 thinkingmonkey.com和 www.thinkingmonkey.com有一個虛擬主機,並使用 mod_rewrite 規則重定向到https://thinkingmonkey.me 。
- thinkingmonkey.me有其獨立的虛擬主機。
問題
+ mod_ssl起作用並且在****mod_rewrite重寫到https://thinkingmonkey.me之前發生 TLS 握手。 + 由於證書中的通用名稱在thinkingmonkey.me下,因此此連接不受信任警告會在瀏覽器中顯示。 + 除非我通過接受證書完成握手,否則它不會被重定向到thinkingmonkey.me。這很煩人。
那麼,
有沒有辦法訪問
mod_rewrite
之前mod_ssl
?還是
我必須購買單獨的證書才能擺脫這個?
不,HTTPS 是基於 TLS/SSL 的 HTTP(參見RFC 2818),它首先建立 SSL/TLS 連接,然後再發送任何 HTTP 流量。
mod_rewrite
將始終在 SSL/TLS 連接建立後應用。不這樣做實際上是一個安全問題,因為攻擊者可以在證書驗證之前重寫和重定向客戶端。即使 TLS 升級是在 HTTP(RFC 2817,實際上從未使用/支持,也不是
https
)內,您仍然希望重定向來自受信任的實體。解決此問題的方法是使用具有多個主題備用名稱 (SAN) DNS 條目的證書,每個主機名一個或多個證書(在這種情況下,您可能也需要每個證書一個 IP 地址,除非您願意使用伺服器名稱指示)。