Tomcat SSL 配置生成器
生成 Tomcat server.xml 里带 SSLHostConfig 的 HTTPS Connector,支持 PEM 或 PFX 证书,并附上 web.xml 的 HSTS 过滤器。
浏览器本地运行 你输入的内容只在本地用 JavaScript 处理,不会上传到 ssl.sh。
TLS 配置生成器的 Tomcat 预设生成 conf/server.xml 里带 SSLHostConfig 的 HTTPS Connector,以及 conf/web.xml 里的 HSTS 过滤器。两段都粘贴好后重启 Tomcat。
示例:中级档
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig protocols="TLSv1.2+TLSv1.3"
ciphers="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305"
honorCipherOrder="false"
disableSessionTickets="true">
<Certificate certificateFile="/etc/ssl/example.com/cert.pem"
certificateKeyFile="/etc/ssl/example.com/privkey.pem"
certificateChainFile="/etc/ssl/example.com/chain.pem" />
</SSLHostConfig>
</Connector>
用云厂商下载的 PFX 时:
<Certificate certificateKeystoreFile="conf/example.com.pfx"
certificateKeystoreType="PKCS12"
certificateKeystorePassword="密码文件里的密码" />
版本说明
- Tomcat 9.0、10.1、11 都支持这个写法(8.5 也支持,但已停止维护)。
- TLS 1.3 需要 Java 11+。Java 8u291/11.0.11 起在
java.security里默认禁用了 TLS 1.0/1.1,兼容旧版档还要修改这项设置。 - Tomcat 会把 OpenSSL 风格的套件名转换给 JSSE 用,所以同一个
ciphers字符串有没有 Tomcat Native 都能用。
重启并测试
sudo systemctl restart tomcat
openssl s_client -connect example.com:8443 -servername example.com </dev/null | head -5
想直接在 443 端口提供 HTTPS,可以改端口并允许 Tomcat 绑定特权端口,或者在前面放一个反向代理。
常见错误
- 密钥库密码或类型不对:日志里有 “keystore password was incorrect”,
.pfx文件要写certificateKeystoreType="PKCS12"。 - 缺证书链:Java 客户端会报 PKIX path building failed,设置
certificateChainFile或者在 PFX 里带上证书链。
常见问题
用 PEM 文件还是 PFX 密钥库?
Tomcat 8.5 起两种都行。PEM 方便配合 ACME 客户端自动更新;PKCS #12 把所有东西放在一个带密码的文件里,阿里云、腾讯云给 Tomcat 的下载包大多就是这种。
还需要 JKS 吗?
不需要。JKS 是旧格式,Java 9 起默认密钥库类型就是 PKCS #12,Tomcat 可以直接读 PKCS #12 和 PEM。云厂商下载包如果是 .jks,也可以继续用(certificateKeystoreType="JKS")。
Tomcat 前面有 Nginx 或负载均衡,还要配这个吗?
如果 TLS 在代理上终止,代理通过内网 HTTP 连 Tomcat,就不用。在代理上配置 TLS,并让 Tomcat 知道原始协议(RemoteIpValve)。