核心结论
一台 Tomcat,多个域名(虚拟主机),每个域名配自己的 SSL 证书,用 HTTPS 443 端口访问。
一、准备工作
- 你有 2 个以上域名:
www.a.com、www.b.com - 每个域名有 SSL 证书(推荐
.pfx格式,阿里云 / 腾讯云直接下载) - 把证书放到:
tomcat/conf/ssl/(自己新建 ssl 文件夹)
二、最关键配置(server.xml)
1. 配置 HTTPS 连接器(支持多虚拟主机 SSL)
xml
<Connector
port="443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
scheme="https"
secure="true"
sslProtocol="TLS">
<!-- 第一个虚拟主机 SSL:www.a.com -->
<SSLHostConfig hostName="www.a.com">
<Certificate
certificateKeystoreFile="conf/ssl/a.com.pfx"
type="RSA"
certificateKeystorePassword="证书密码"
certificateKeystoreType="PFX" />
</SSLHostConfig>
<!-- 第二个虚拟主机 SSL:www.b.com -->
<SSLHostConfig hostName="www.b.com">
<Certificate
certificateKeystoreFile="conf/ssl/b.com.pfx"
type="RSA"
certificateKeystorePassword="证书密码"
certificateKeystoreType="PFX" />
</SSLHostConfig>
</Connector>
2. 配置虚拟主机(与上面 hostName 对应)
xml
<Engine name="Catalina" defaultHost="localhost">
<!-- 默认主机 -->
<Host name="localhost" appBase="webapps" />
<!-- 虚拟主机 1 -->
<Host name="www.a.com" appBase="webapps/a.com" />
<!-- 虚拟主机 2 -->
<Host name="www.b.com" appBase="webapps/b.com" />
</Engine>
三、HTTP 自动跳转 HTTPS(推荐加上)
xml
<Connector port="80" redirectPort="443" />
四、最重要规则(必须遵守)
<SSLHostConfig hostName="xxx">必须 完全等于
<Host name="xxx">- 证书路径、密码不能错
- 配置完 必须重启 Tomcat
五、访问效果
plaintext
https://www.a.com
https://www.b.com
✅ 每个域名用自己独立的证书
✅ 一台 Tomcat 支持无数个 HTTPS 虚拟主机
六、如果你用的是 pem 证书(crt + key)
替换成这样即可:
xml
<SSLHostConfig hostName="www.a.com">
<Certificate
certificateFile="conf/ssl/a.crt"
certificateKeyFile="conf/ssl/a.key"
type="RSA" />
</SSLHostConfig>
最简总结
- Connector 443 里写
<SSLHostConfig>配置证书 - Host 里写域名和项目路径
- 两者名字必须一样
- 重启 → 成功