2011-08-28 52 views
-1

根據this question當我們使用HTTPS時,所有的HTTP頭都被加密(包括請求URI和主機頭)。
當瀏覽器想要瀏覽網站上的一個使用HTTPS的頁面時,它首先創建安全連接,然後它發送HTTP請求(加密)並且服務器將答案返回給瀏覽器。現在假設有多個安全網站帶有多個SSL證書,所以當服務器想要創建安全連接時,它如何檢測應該使用哪個證書,因爲它不知道任何關於請求的信息!驗證共享主機上的SSL證書

+2

請回顧[這個問題](http://stackoverflow.com/questions/5316513/is-ssl-possible-with-virtual-hosting-on-one-ip)及其答案。 –

回答

2

由於在接收到Host標頭之前協商SSL通道,因此HTTPS服務器最多可以爲每個綁定的IP端點(IP地址和端口)使用一個證書。換句話說,要使用兩個不同的SSL證書,您需要將每個虛擬主機綁定到不同的端口或不同的IP地址。

+0

您的陳述不正確 - TLS的服務器名稱擴展使這些要求過時。 –

+0

據我所知,該擴展的支持尚未廣泛部署。 – cdhowie

+0

所有主流瀏覽器和幾乎所有(如果不是全部)TLS庫都支持它。我相信,所有主流服務器都支持它。 –

-1

這樣做的基礎是爲每個虛擬服務器提供一個SSL密鑰(set)。例如,在Apache中,它比較簡單。每個共享網站都可能在<VirtualHost>指令中。 SSL密鑰可以在其中指定,因此僅適用於該虛擬主機。

粗糙例如:

<VirtualHost *:443> 
    ServerName server.com 

    SSLEngine on 
    SSLCertificateKeyFile /etc/ssl/server_com.key 
    SSLCertificateFile /etc/ssl/server_com.crt 
    SSLCertificateChainFile /etc/ssl/server_com.ca-bundle 

的服務器將使用指定的鍵指向該網站通過HTTPS的所有請求。 Further details on the Apache site。類似的東西應該適用於大多數支持虛擬主機概念的Web服務器。

由於證書和域名匹配,您不會收到任何錯誤。

+0

這隻有在每個SSL虛擬主機綁定到不同的IP地址或端口時纔有效。 – cdhowie

+1

如果頭文件被加密,服務器如何知道應用哪個VirtualHost? (這是提問者想知道的問題。) –

+0

@cdhowie我不確定這一點,我知道我的一個共享主機帳戶可以與證書一起工作,只要域匹配即可。這是一個共享的知識產權,但他們是如何在後臺建立起來的,我不知道。 – ssube

1

在TLS之前,服務器確實沒有辦法知道它應該呈現給客戶端的哪個主機的證書,並且這導致了問題。

在TLS中引入了一個名爲Server Name的特殊擴展名(請參閱RFC 3546),它允許客戶端告訴服務器客戶端想要連接到的主機。根據此擴展的內容,服務器可以提供適當的證書。當然,所有這些都要求雙方都支持和使用TLS和擴展本身。