在 Debian 上给 Tomcat 开启 HTTPS,通常有两种常见做法:
下面先讲 Tomcat 原生 HTTPS(最常用、最直接)。
假设:
/var/lib/tomcat9 或 /opt/tomcat)Tomcat 使用 JKS 或 PKCS12 格式。
sudo keytool -genkeypair \
-alias tomcat \
-keyalg RSA \
-keysize 2048 \
-validity 365 \
-storetype PKCS12 \
-keystore /etc/tomcat9/keystore.p12 \
-storepass changeit
提示信息随便填,但 名字和姓 建议写域名或 localhost
sudo nano /etc/tomcat9/server.xml
找到被注释的 HTTPS 配置,改成:
<Connector
port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/etc/tomcat9/keystore.p12"
keystorePass="changeit"
keystoreType="PKCS12"
clientAuth="false"
sslProtocol="TLS" />
如果用 JKS,把
keystoreType改成JKS
sudo systemctl restart tomcat9
访问:
https://服务器IP:8443
浏览器会提示“不安全”,这是正常的(自签证书)
编辑 web.xml(应用或全局):
sudo nano /etc/tomcat9/web.xml
在 </web-app> 前加:
<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>
✅ 不要直接暴露 Tomcat 8443 ✅ 用 Nginx + Let’s Encrypt
示例 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;
}
}
Tomcat 只跑 HTTP 8080 即可。
看日志:
sudo journalctl -u tomcat9
确认 keystorePass 和生成时一致
改 8443 为 443(需 root)
如果你告诉我:
我可以给你 精确配置 或 一键脚本