Tomcat托管多个具有多个SSL证书的虚拟主机

Cho*_*hun 5 apache ssl tomcat ssl-certificate tomcat7

例如,我有一台使用Tomcat 7托管多个网站的服务器

  • a.abc.com
  • b.abc.com
  • c.def.com
  • d.def.com

使用tomcat的虚拟主机功能,因此它们每个都可能属于不同的webapps文件夹.

我们现在正在尝试为每个站点实现Https.所以基本上我们有2个通配符证书,*.abc.com和*.def.com

我一直在寻找设置的方法,我发现:

  • 这就教会了我如何使用tomcat设置SSL
  • 教会了我如何使用指向不同IP地址的不同SSL设置多个主机

第二个例子最接近我的需要,但问题是我的所有虚拟主机都具有相同的IP地址,唯一的区别在于域名本身,更糟糕的是大多数它们甚至有几个不同的别名(例如:我的d. def.com可以将e.ghi.com作为其别名之一).

所以我的问题是,无论如何我可以为我的所有虚拟主机设置多个SSL证书吗?

ped*_*ofb 5

我担心用tomcat满足你的所有要求是不可能的:

  • 多个域名
  • 两个SSL证书
  • 唯一的IP地址
  • 标准SSL端口(我假设它)

Tomcat SSL配置在<Connector>元素中定义config.xml

<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443" maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       keystoreFile="${user.home}/.keystore" keystorePass="changeit"
       clientAuth="false" sslProtocol="TLS"/>
Run Code Online (Sandbox Code Playgroud)

每个连接器都需要一个port属性 请参阅HTTP连接器文档中的定义

此连接器将在其上创建服务器套接字并等待传入​​连接的TCP端口号.您的操作系统将只允许一个服务器应用程序侦听特定IP地址上的特定端口号.

因此,您无法使用相同的端口定义两个连接器,然后无法配置不同的SSL证书.

备择方案

  • 几个IP:该address属性配置将用于侦听指定端口的地址.使用SSL证书Connector为每个主域设置IP并为其配置

  • 不同的端口:443用于*.abc.com,444用于*.def.com,依此类推

  • SSL代理:在tomcat前部署Apache或Nginx等代理服务器.代理仅处理SSL协商和虚拟主机.所有流量都以纯HTTP重定向到Tomcat.

就像使用Apache mod_ssl +和tomcat连接器mod_JK一样,您所请求的配置很简单

listen 443

<VirtualHost *:443>
    ServerName a.abc.com:443
    SSLEngine on
    SSLProtocol all -SSLv2 
    SSLCertificateFile "/home/certs/abc.com.crt"
    SSLCertificateKeyFile "/home/certs/abc.com.key"
    SSLCertificateChainFile  "/home/certs/abc.com.ca-bundle"
    SSLOptions +StdEnvVars  +ExportCertData 
    ErrorLog "/var/logs/error_abc_443.log"
    TransferLog "/var/logs/error_abc_443.log"
    JkMount  /* worker1

</VirtualHost>


<VirtualHost *:443>
    ServerName c.def.com:443
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile "/home/certs/def.com.crt"
    SSLCertificateKeyFile "/home/certs/def.com.key"
    SSLCertificateChainFile  "/home/certs/def.com.ca-bundle"
    SSLOptions +StdEnvVars  +ExportCertData
    ErrorLog "/var/logs/error_def.log"
    TransferLog "/var/logs/error_def.log"
    JkMount  /* worker2
</VirtualHost> 
Run Code Online (Sandbox Code Playgroud)

  • 所有的网站现在只有一个tomcat实例,在httpd配置中配置非常简单,非常感谢.=) (2认同)