我知道tomcat可以通过设置多个监听不同IP的连接器来处理多个SSL证书,但是可以在同一个IP上设置它吗?
情况是我们有多个 Web 应用程序在单个 tomcat 实例中运行。我们的服务器只有 1 个静态 IP。Tomcat 设置为具有虚拟服务器,因此根据域的不同,它服务于不同的应用程序。但是,如果我们希望在其中一个以上的应用程序中使用 SSL,我预测我们可能会遇到麻烦。
有没有人在这个领域有更多的经验?
为了能够在同一个 IP 地址和端口上使用多个证书,您需要服务器名称指示支持。不幸的是,这是在 Java 7 中引入的,仅在客户端。
(客户端的 SNI 支持仍然存在问题,最明显的原因是 Win XP、Java 6 及更低版本以及某些移动浏览器上的任何版本的 IE 都缺乏支持。)
解决方法是使用支持多个主机名的单个证书。执行此操作的首选方法是拥有一个包含多个主题备用名称 (SAN) 条目的证书。否则,如果名称有模式,通配符证书可能是合适的(例如*.example.com
,对于www.example.com
and secure.example.com
)。
Apache Httpd 支持 SNI,因此您可以通过VirtualHost
对要服务的每个主机名使用不同的 s 并为每个主机使用不同 Tomcat 配置的反向代理来解决您的问题。
我不相信你会用 1 个 IP 地址逃脱,但你可以使用多个端口
<Connector
port="9001" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="${user.home}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS"/>
-->
then https:9001//myurl
for your connections I would personally front it off to an apache httpd reverse proxy server though as it gives you way more flexibility and not a little security when properly configured
I am not sure, here if "SNI" is really relevant.
But in your case, the typical solution would be so called ssloffloading or ssl Termination: i.e. put your tomcat behinde an apache, which configured to use multiple vhosts / domain names on the same ip. You could configure for each vhost in apache to use its own SSL certificate.
There is a step by step guide for this topic here:
http://milestonenext.blogspot.de/2012/09/ssl-offloading-with-modjk-part-1.html