在 Debian 上给 Tomcat 开启 HTTPS,通常有两种常见做法:
下面先讲 Tomcat 原生开启 HTTPS(最常用方式)。
假设:
/opt/tomcat 或 /usr/share/tomcat9查看 Tomcat 版本:
systemctl status tomcat9
keytool -genkeypair \
-alias tomcat \
-keyalg RSA \
-keysize 2048 \
-validity 365 \
-keystore /opt/tomcat/conf/tomcat.keystore \
-storepass changeit
按提示输入:
编辑:
vi /opt/tomcat/conf/server.xml
默认是被注释的,取消注释并改成:
<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>
chown tomcat:tomcat /opt/tomcat/conf/tomcat.keystore
chmod 600 /opt/tomcat/conf/tomcat.keystore
ufw allow 8443/tcp
systemctl restart tomcat9
访问:
https://服务器IP:8443
浏览器会提示证书不安全(自签名正常现象)
在 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
如果你告诉我:
我可以给你 更精确的配置示例。