2009-02-05 86 views
35

我正在嘗試設置我們的服務器以允許通過SSL的流量。我知道SSL不適用於名稱虛擬主機,但我們在具有專用私有IP的虛擬機上擁有所有的apache服務器。我們有一個主虛擬機,它具有mod_proxy設置來將流量路由到適當的虛擬機。使用SSL的Apache名稱虛擬主機

但是,爲了路由https流量,我們需要在代理上安裝證書以及vms。我們有一個可以在所有主機上使用的通配符證書。一切似乎正常工作,但我在代理的apache日誌中收到以下內容:

[警告]初始化:SSL服務器IP /端口衝突:host1.domain.com:443(/ etc/apache2/sites-對於host2.domain.com:443(/ etc/apache2/sites-enabled/host2:1)

對於我們在代理上設置的每個主機,有一條錯誤消息。我們的代理虛擬主機設置張貼如下:

<VirtualHost ipaddress:443> 
    ServerName host1.domain.com 
    ProxyPreserveHost On 
    ProxyRequests Off 
    ProxyPass/https://privateip:443/ 
    ProxyPassReverse/https://privateip:443/ 

    SSLProxyEngine on 
    SSLEngine on 
    SSLCertificateFile /etc/ssl/certs/server.crt 
    SSLCertificateKeyFile /etc/ssl/private/server.key 
</VirtualHost> 

有什麼辦法,我可以得到這個工作?

+0

確保您生成正確的`常見Name`證書或將在工作一些瀏覽器,而不是IE – 2013-01-25 04:48:05

回答

21

聽起來像Apache警告你,你有多個<VirtualHost>部分具有相同的IP地址和端口......只要讓它在沒有警告的情況下工作,我想你需要使用類似Server Name Indication(服務器名稱指示SNI),這是一種標識所請求的主機名作爲SSL握手一部分的方式。基本上它可以讓你通過SSL進行基於名稱的虛擬主機,但我不確定它是否被瀏覽器支持。除了SNI以外,您基本上只能爲每個公開互聯網的IP地址使用一個啓用SSL的域名。

當然,如果您能夠正確訪問網站,您可能會很好地忽略警告。這些特別的一些不很嚴重 - 他們主要是看在什麼如果您遇到問題

指示
+0

David, 感謝您的回覆。在做一些研究之後,我相信這將是一條路。但是,在Windows XP下對SNI的支持有限。我想我會嘗試這個,因爲我使用通配證書。如果這不起作用,我想我現在不得不忽略這些錯誤。 – JamesArmes 2009-02-06 13:31:22

+0

PS:大多數網站似乎將此稱爲服務器名稱指示,而不是標識。 – JamesArmes 2009-02-06 13:32:16

+0

啊,我的壞...我真的只記得首字母縮略詞,SNI。我將編輯帖子。 – 2009-02-06 18:42:54

3

您可以將更換:

VirtualHost ipaddress:443 

VirtualHost *:443 

您可能需要在所有虛擬主機上都使用此操作。

它可能會清除該消息。讓ServerName指令擔心路由消息請求。

同樣,如果你有多個ip的別名到同一臺機器,你可能無法做到這一點。

+0

Harold, 感謝您的回覆。我早些時候嘗試過,並沒有什麼區別。 – JamesArmes 2009-02-06 13:28:46

1

Apache僅在基於IP的虛擬主機上不支持基於名稱的虛擬主機上的SSL。

來源:Apache 2.2的SSL FAQ問題Why is it not possible to use Name-Based Virtual Hosting to identify different SSL virtual hosts?

與SSL,TLS規範允許基於域名的主機(SNI由別人提到),但是Apache還不支持此功能。它應該會在將來的版本中針對openssl 0.9.8進行編譯。

此外,mod_gnutls聲稱支持SNI,但我從來沒有真正嘗試過。

1

首先,你需要了NameVirtualHost IP:在你443的配置文件! 你可能有一個80末,但你也將需要一個有443

其次,你需要一個*。域證書(通配符)(它有可能使一個)

三,你可以使只有something.domain網在一個IP(因爲證書)

0

的虛擬主機是這樣的:

NameVirtualHost IP_Address:443 

<VirtualHost IP_Address:443> 
    SSLEngine on 
    SSLCertificateFile /etc/pki/tls/certs/ca.crt # Where "ca" is the name of the Certificate 
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key 
    ServerAdmin [email protected]_name.com 
    DocumentRoot /var/www/html 
    ServerName www.domain_name.com 
    ErrorLog logs/www.domain_name.com-error_log 
    CustomLog logs/www.domain_name.com-access_log common 
</VirtualHost>