2013-11-25 199 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