2012-06-07 74 views
7

問題重定向到SSL要求

前的「www」我現在有地方https://domain.com不重定向到https://www.domain.com,並顯示一個不受信任的SSL證書的問題。

這是關係到這是一個的Ruby-on-軌解決方案 redirect to 'www' before force_ssl

問題

有沒有辦法來重定向到SSL要求踢前的WWW域名?

我正在使用PHP。

+0

可能重複的[重定向https到非www和http到www](http://stackoverflow.com/questions/10725357/redirect-https-to-non-www-and-http-to-www) – Bruno

+0

@布魯諾看了很多情況,但沒有一個定義了由欺騙給出的答案 – williamcarswell

+0

不知道你的意思。我可以或多或少地複製/粘貼我給另一個問題的答案來回答你的問題。 (或多或少與真正的說法相同;他沒有說的唯一的事情是你可以通過擁有一個對兩者都有效的證書來實現你想要的)。關於這個問題有很多問題。這裏是SF上的另一個:http://serverfault.com/a/360985/47187 – Bruno

回答

18

HTTPS是HTTP over TLS/SSL(請參閱RFC 2818),它首先在發送任何HTTP流量之前建立SSL/TLS連接。任何重定向(通過mod_rewrite,自定義PHP代碼或其他)將始終在SSL/TLS連接建立後應用。

不這樣做實際上是一個安全問題,因爲攻擊者可以在證書驗證之前重寫和重定向客戶端。

如果要重定向從https://domain.comhttps://www.domain.com,爲https://domain.com獲得的證書必須是有效的domain.com(然後,對於https://www.domain.com獲得該證書必須爲www.domain.com有效)。

(你可以使用與服務器名稱指示兩個不同的證書,如果這兩臺主機是服務於同一個IP地址,但是這是相當令人費解。)

最簡單的將獲得的證書的有效期爲兩個domain.comwww.domain.com。這可以使用具有多個主題備用名稱條目的單個證書來完成。大多數CA應該能夠頒發這樣的證書。有些人沒有額外的費用。

1

重定向響應通過HTTP協議發出。爲了接收這樣的響應/命令,客戶端首先需要建立HTTP連接。如果客戶端嘗試建立HTTP_S_連接,則需要首先完成SSL協商。

換句話說,沒有。網址https://domain.com對您的應用無效。任何客戶都不應該知道這個特定的地址,因此不應該嘗試訪問它。您應該避免在任何地方提供此URL,以便客戶端不會嘗試訪問它。實際上,您似乎並不想爲該域運行HTTPS服務器,因此您應該將其關閉,因此客戶端根本無法通過HTTPS連接到domain.com

0

我已經找到了最好的解決辦法是簡單地購買與主題備用名稱的一個新的SSL證書,所以你可以有www和非www相同的證書中,並且都是有效的。通過這種方式,您可以安全地將https://www重定向到https://透明且無任何證書錯誤。