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

2024-05-10

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

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

使用tomcat的虚拟主机功能,因此它们各自可能属于不同的webapps文件夹。

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

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

  • This https://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html它教我如何使用 tomcat 设置 SSL
  • This https://stackoverflow.com/a/6343059/1131470它教我如何使用指向不同 IP 地址的不同 SSL 设置多个主机

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

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


恐怕 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 连接器 https://tomcat.apache.org/tomcat-7.0-doc/config/http.html文档

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

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

备择方案

  • 多个IP: The address属性配置将使用哪个地址来侦听指定端口。使用 SSL 证书设置每个主域的 IP 并配置Connector for it

  • 不同端口: 443对于 *.abc.com,444对于 *.def.com 等

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

作为一个例子使用Apache mod_ssl https://httpd.apache.org/docs/current/mod/mod_ssl.html+ 和 tomcat 连接器mod_JK http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html您要求的配置很简单

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> 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat 托管具有多个 SSL 证书的多个虚拟主机 的相关文章

随机推荐