2013-11-25 197 views
6

根據這兩個答案(1)(2),可以使用服務器名稱指示(SNI)從同一個tomcat服務器提供兩個ssl證書。如何設置Tomcat使用SNI提供兩個SSL證書?

我的問題是,如何設置? 我可以設置兩個虛擬主機,但我仍然只有一個連接器,它向客戶端呈現指定的ssl證書。在連接器中,可以指定用於證書的密鑰庫和別名,但沒有參數說明該連接器用於哪個虛擬主機,或者根據所使用的域將哪個證書提供給客戶端。

如何告訴tomcat使用SNI時必須使用哪個ssl證書(或者要更正確哪個密鑰庫)?

(1)https://stackoverflow.com/a/10173447 (2)https://stackoverflow.com/a/6343059

回答

14

您需要重新閱讀回答這些問題。在Java 8之前,服務器端不支持SNI。Tomcat 8必須支持的最低Java版本是Java 7,因此目前我沒有在Tomcat中支持SNI。

如果Tomcat在Java 8或更高版本上運行,但是需要在當前沒有計劃的Tomcat中進行代碼更改,則可以選擇性地支持SNI。

更新爲2014年12月的:

加入SNI支持是TODO列表爲Tomcat 9.對TODO名單很長,SNI是不是目前在列表的頂部。一如既往的補丁歡迎。

一旦在Tomcat 9中實現了SNI,可能會將SNI支持移植到Tomcat 7和Tomcat 8.同樣,修補歡迎。

更新爲2015年6月的:

SNI已實施的Tomcat 9.它是由所有三個連接器HTTP實現(NIO,NIO2和APR /天然的)的支持。要將SNI與NIO或NIO2一起使用,您需要從源代碼編譯Tomcat 9(a.k.a. trunk)。要使用APR/native的SNI,您還需要編譯tc-native trunk(而不是Tomcat版本當前使用的1.1.x分支)。

TLS配置已發生顯着變化以支持SNI。詳細信息將在該文檔中的Web應用程序,一旦你有構建Tomcat 9.

更新截至11月2016:

SNI支持包含在Tomcat的8.5.x.它不太可能會被進一步移植。即不可能使其變爲8.0.x或7.0.x.

+0

這方面有沒有進展,或者你的答案仍然是今天的情況? – stepanian

+0

答覆已更新。 –

+0

感謝您的更新。如果Google繼續推行SSL,那麼對於那些太窮的人來說,對於每個需要SSL的站點創建新的AWS服務器實例的人來說,這將變得更加重要。 – stepanian

1

你可以在tomcat前安裝nginx/haproxy(都支持SNI),它們將作爲代理。

+0

實際上,在http://arstechnica.com/information-technology/2015/上爲haproxy提供了相當不錯的教程。 05/web-served-how-to-make-your-site-all-https-all-time-for-everyone/ – idarwin

3

你可以使用下面的配置設置多個SSL證書:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
       maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="domain1"> 
     <SSLHostConfig hostName="domain1" > 
      <Certificate certificateKeystoreFile="conf/domain1-keystore.jks" certificateKeystorePassword="dom1keystorepwd" 
         certificateKeyPassword="dom1keypwd" 
         type="RSA" /> 
     </SSLHostConfig> 
     <SSLHostConfig hostName="domain2" > 
      <Certificate certificateKeystoreFile="conf/domain2-keystore.jks" certificateKeystorePassword="dom2keystorepwd" 
         certificateKeyPassword="dom2keypwd" 
         type="RSA" /> 
     </SSLHostConfig> 
    </Connector> 

根據您的需要扭​​捏的協議。 您也可以使用openssl而不是jsse進行配置。請參考 https://tomcat.apache.org/tomcat-8.5-doc/config/http.html#SSL_Support_-_SSLHostConfig獲取進一步幫助

此外,defaultSSLHostConfigName是非常重要的,否則它將無法正常工作。選擇任一個域作爲默認域。

+0

感謝提示。沒有defaultSSLHostConfigName不起作用 – MitchBroadhead