在 Debian 上给 Tomcat 配置 HTTPS,常见做法有两种:
下面先讲 Tomcat 原生 HTTPS 配置(最常用)。
假设:
/opt/tomcat 或 /var/lib/tomcat9)openjdkcd /opt/tomcat/conf
keytool -genkeypair \
-alias tomcat \
-keyalg RSA \
-keysize 2048 \
-validity 365 \
-keystore tomcat.keystore \
-storepass changeit \
-keypass changeit
按提示填写:
生成后会有:
/opt/tomcat/conf/tomcat.keystore
生产环境建议使用 Let’s Encrypt 证书(后面说)
编辑:
vim /opt/tomcat/conf/server.xml
找到并修改 Connector:
<Connector
port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true">
<SSLHostConfig>
<Certificate
certificateKeystoreFile="conf/tomcat.keystore"
certificateKeystorePassword="changeit"
type="RSA" />
</SSLHostConfig>
</Connector>
保存后重启 Tomcat:
systemctl restart tomcat
# 或
/opt/tomcat/bin/shutdown.sh
/opt/tomcat/bin/startup.sh
访问:
https://服务器IP:8443
编辑:
vim /opt/tomcat/conf/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>
Let’s Encrypt 给的是 PEM 证书,Tomcat 需要 PKCS12:
openssl pkcs12 -export \
-in fullchain.pem \
-inkey privkey.pem \
-out tomcat.p12 \
-name tomcat \
-passout pass:changeit
server.xml 改成:
<Connector port="8443" protocol="HTTP/1.1"
SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/tomcat.p12"
certificateKeystoreType="PKCS12"
certificateKeystorePassword="changeit" />
</SSLHostConfig>
</Connector>
用户 → Nginx(HTTPS) → Tomcat(HTTP)
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 只开 8080,更安全、易维护。
ufw allow 8443
自签名证书正常现象,生产请用 Let’s Encrypt。
看日志:
tail -f /opt/tomcat/logs/catalina.out
如果你告诉我:
我可以直接给你一份可用配置。