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



