下面以 Debian + Apache Tomcat(常见 9.x) 为例,说明 配置 SSL/HTTPS 的完整流程。你可以按自己的 Tomcat 版本微调。
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
keytool -genkeypair \
-alias tomcat \
-keyalg RSA \
-keysize 2048 \
-validity 365 \
-keystore /etc/tomcat9/keystore.jks \
-storepass changeit
Debian 下通常是:
/etc/tomcat9/server.xml
编辑 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>
<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>
sudo ufw allow 8443/tcp
如果想直接用 443:
<Connector port="443" ...
⚠ 需要 root 权限或 setcap:
sudo setcap cap_net_bind_service+ep /usr/lib/jvm/java-*/bin/java
编辑:
/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>
sudo systemctl restart tomcat9
访问:
https://example.com:8443
查看日志:
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 / 10、Debian 11 / 12 或 Nginx 反向代理 再细化吗?