温馨提示×

Debian Tomcat如何开HTTPS

小樊
46
2026-09-24 19:10:31
栏目: 智能运维

在 Debian 上给 Tomcat 开启 HTTPS,通常有两种常见做法:

  1. Tomcat 直接配置 SSL(推荐学习/测试)
  2. Nginx / Apache 反向代理 + HTTPS(生产推荐)

下面先讲 Tomcat 原生开启 HTTPS(最常用方式)。


一、准备环境

假设:

  • Debian 11 / 12
  • Tomcat 9 / 10
  • Tomcat 安装目录:/opt/tomcat 或 /usr/share/tomcat9

查看 Tomcat 版本:

systemctl status tomcat9

二、生成 SSL 证书(自签名示例)

1. 使用 keytool 生成证书

keytool -genkeypair \
  -alias tomcat \
  -keyalg RSA \
  -keysize 2048 \
  -validity 365 \
  -keystore /opt/tomcat/conf/tomcat.keystore \
  -storepass changeit

按提示输入:

  • 名字:localhost
  • 组织单位:可选
  • 城市:可选
  • 密码:建议和 storepass 一致

三、配置 Tomcat 支持 HTTPS

编辑:

vi /opt/tomcat/conf/server.xml

1. 找到并修改 HTTPS Connector

默认是被注释的,取消注释并改成:

<Connector
    port="8443"
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150"
    SSLEnabled="true"
    scheme="https"
    secure="true"
    clientAuth="false"
    sslProtocol="TLS">

    <SSLHostConfig>
        <Certificate
            certificateKeystoreFile="/opt/tomcat/conf/tomcat.keystore"
            certificateKeystorePassword="changeit"
            type="RSA" />
    </SSLHostConfig>
</Connector>

四、权限与防火墙

1. 修改证书权限

chown tomcat:tomcat /opt/tomcat/conf/tomcat.keystore
chmod 600 /opt/tomcat/conf/tomcat.keystore

2. 开放端口

ufw allow 8443/tcp

五、重启 Tomcat

systemctl restart tomcat9

访问:

https://服务器IP:8443

浏览器会提示证书不安全(自签名正常现象)


六、可选:HTTP 自动跳转 HTTPS

在 conf/web.xml 最后加上:

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

七、生产环境建议

✅ 使用 Let’s Encrypt 证书
✅ 使用 Nginx 反向代理 Tomcat
✅ Tomcat 只监听 8080,Nginx 处理 443

示例 Nginx:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

八、常见问题

❌ java.io.IOException: Keystore was tampered → 密码错误或证书路径不对

❌ 端口被占用

netstat -tunlp | grep 8443

如果你告诉我:

  • Tomcat 版本
  • 是否用 Docker
  • 是否已有域名证书

我可以给你 更精确的配置示例。

0 踩