一尘不染

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

tomcat

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

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

现在,我们正在尝试对每个站​​点实施Https。因此,基本上我们获得了2个通配符证书 .abc.com和 .def.com

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

  • 是教会我如何使用tomcat设置SSL的地方
  • 哪里是教我如何设置多个主机,不同的SSL指向不同的IP地址

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

所以我的问题是,是否仍然可以为所有虚拟主机设置多个SSL证书?


阅读 274

收藏
2020-06-16

共1个答案

一尘不染

恐怕无法使用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"/>

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

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

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

备择方案

  • 多个IP :该address属性配置将使用哪个地址在指定端口上进行侦听。使用SSL证书Connector为每个主域设置IP并为其配置

  • 不同的端口443 .abc.com444。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>
2020-06-16