温馨提示×

Debian Tomcat如何配SSL

小樊
37
2026-08-05 08:34:50
栏目: 云计算

下面以 Debian + Apache Tomcat(常见 9.x) 为例,说明 配置 SSL/HTTPS 的完整流程。你可以按自己的 Tomcat 版本微调。


一、准备 SSL 证书

方式 1:使用 Let’s Encrypt(推荐,生产环境)

sudo apt update
sudo apt install certbot

申请证书(Tomcat 一般用 PKCS12 格式):

sudo certbot certonly --standalone -d example.com

证书路径:

/etc/letsencrypt/live/example.com/
├── fullchain.pem
├── privkey.pem

转换为 PKCS12:

sudo openssl pkcs12 -export \
  -in fullchain.pem \
  -inkey privkey.pem \
  -out tomcat.p12 \
  -name tomcat \
  -passout pass:changeit

方式 2:自签名证书(测试用)

keytool -genkeypair \
  -alias tomcat \
  -keyalg RSA \
  -keysize 2048 \
  -validity 365 \
  -keystore /etc/tomcat9/keystore.jks \
  -storepass changeit

二、配置 Tomcat 使用 SSL

1️⃣ 找到 Tomcat 配置文件

Debian 下通常是:

/etc/tomcat9/server.xml

2️⃣ 启用 HTTPS Connector(重点)

✅ 使用 PKCS12(Let’s Encrypt 推荐)

编辑 server.xml

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150"
           SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="/etc/letsencrypt/live/example.com/tomcat.p12"
                     certificateKeystorePassword="changeit"
                     certificateKeystoreType="PKCS12"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

✅ 使用 JKS(自签名)

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150"
           SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="/etc/tomcat9/keystore.jks"
                     certificateKeystorePassword="changeit"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

3️⃣ 开放 8443 端口(或 443)

sudo ufw allow 8443/tcp

如果想直接用 443

<Connector port="443" ...

⚠ 需要 root 权限或 setcap:

sudo setcap cap_net_bind_service+ep /usr/lib/jvm/java-*/bin/java

三、强制 HTTP 跳转 HTTPS(可选)

编辑:

/etc/tomcat9/web.xml

</web-app> 前添加:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>HTTPS Only</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

四、重启 Tomcat

sudo systemctl restart tomcat9

访问:

https://example.com:8443

五、常见问题排查

❌ 浏览器提示证书不安全

  • 自签名证书正常现象
  • 生产环境请使用 Let’s Encrypt

❌ Tomcat 启动失败

查看日志:

journalctl -u tomcat9
# 或
cat /var/log/tomcat9/catalina.out

❌ 端口被占用

sudo netstat -tulnp | grep 8443

六、推荐生产方案(进阶)

场景 推荐
Java 应用 Tomcat 直接 SSL
反向代理 Nginx → Tomcat
高并发 Nginx 处理 HTTPS

如果你愿意,我可以给你 Nginx + Tomcat SSL 的最佳实践配置


需要我按 Tomcat 8 / 10Debian 11 / 12Nginx 反向代理 再细化吗?

0