TLS 配置生成

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)。

资料来源

  1. Apache Tomcat 10.1 SSL/TLS Configuration How-To
  2. Mozilla Server Side TLS