Tomcat9安装SSL证书的详细步骤与配置指南
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
在当今互联网安全日益受到重视的背景下,为Web服务器部署SSL(Secure Sockets Layer)证书已成为保障数据传输安全的基本要求,对于使用 Apache Tomcat 9 作为 Java Web 应用服务器的开发者与运维人员而言,正确配置 SSL 证书不仅能有效防止数据被窃听或篡改,还能显著提升网站的专业形象和用户信任度。
本文将系统地介绍如何在 Tomcat 9 中安装并配置 SSL 证书,涵盖从环境准备、密钥库生成到服务部署及安全优化的完整流程,帮助您快速实现 HTTPS 加密访问,构建安全可靠的 Web 服务环境。
🔧 准备工作
在开始配置之前,请确保以下几项准备工作已全部完成:
-
已成功安装并运行 Tomcat 9
确认您的服务器上已经部署了 Apache Tomcat 9,并能正常启动,可通过浏览器访问http://your-domain:8080或http://localhost:8080来验证 Tomcat 是否正常运行。 -
获取有效的 SSL 证书
可从权威 CA 机构(如 Let's Encrypt、DigiCert、阿里云、腾讯云等)申请免费或付费的 SSL 证书,通常会收到以下文件:- 服务器证书文件:
your_domain.crt - 私钥文件(Private Key):
private.key - 中间证书(Intermediate Certificate):可能是单个
ca-bundle.crt文件,或多个.crt文件组成的链式证书
- 服务器证书文件:
-
Java 运行环境配置正确
确保 JDK 已正确安装,且环境变量JAVA_HOME指向正确的 JDK 安装路径,Tomcat 依赖 JVM 运行,因此必须保证 Java 版本兼容(推荐使用 JDK 8 或以上版本)。 -
域名解析已完成
确保您的域名已通过 DNS 正确解析至服务器 IP 地址,并能够在公网访问。
🔐 生成密钥库(Keystore)或使用现有证书
Tomcat 使用 Java 的密钥库机制(Keystore)来管理 SSL 证书,默认支持 JKS(Java KeyStore)或 PKCS#12 格式(.jks 或 .pfx/.p12),若您的证书是以 PEM 格式提供(常见于 Nginx/Apache 配置),则需要将其转换为 Tomcat 支持的格式。
将 PEM 证书合并并导入为 JKS 密钥库
第一步:使用 OpenSSL 将 PEM 合并为 PKCS12 格式
openssl pkcs12 -export \
-in your_domain.crt \
-inkey private.key \
-out tomcat.p12 \
-name tomcat \
-CAfile ca-bundle.crt \
-caname root \
-chain
⚠️ 提示:执行过程中会提示设置导出密码(即
.p12文件的保护密码),请务必牢记该密码。
第二步:使用 keytool 将 PKCS12 转换为 JKS 格式
keytool -importkeystore \
-deststorepass changeit \
-destkeypass changeit \
-destkeystore keystore.jks \
-srckeystore tomcat.p12 \
-srcstoretype PKCS12 \
-srcstorepass your_password \
-alias tomcat
📝 说明:
-deststorepass和-destkeypass是目标 JKS 文件的密码,changeit是 Tomcat 默认使用的密钥库密码,建议根据安全策略修改。- 若未设置源
.p12密码,请替换your_password为实际值。
完成后,将生成的 keystore.jks 文件复制到 Tomcat 的 conf/ 目录下,
/usr/local/tomcat/conf/keystore.jks
直接使用 PFX/PKCS12 证书(更简洁)
若您已有 .pfx 或 .p12 格式的证书(如从云服务商下载的一键式证书包),可跳过上述转换步骤,直接将其上传至 Tomcat 的 conf 目录,并在配置中引用即可。
🛠️ 配置 Tomcat 的 server.xml 文件
进入 Tomcat 安装目录下的 conf 子目录,编辑 server.xml 文件,找到默认被注释掉的 HTTPS Connector 配置段:
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
取消注释,并根据实际情况进行修改和完善:
✅ 使用 JKS 密钥库的配置示例:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200"
SSLEnabled="true"
sslProtocol="TLS">
<SSLHostConfig>
<Certificate
certificateKeystoreFile="conf/keystore.jks"
certificateKeystorePassword="your_jks_password"
type="RSA" />
</SSLHostConfig>
</Connector>
✅ 使用 PFX 证书的配置示例:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200"
SSLEnabled="true"
sslProtocol="TLS">
<SSLHostConfig>
<Certificate
certificateKeystoreFile="conf/cert.pfx"
certificateKeystorePassword="your_pfx_password"
certificateKeystoreType="PKCS12"
type="RSA" />
</SSLHostConfig>
</Connector>
🔍 参数说明:
port:HTTPS 服务端口,常用为8443;如需监听标准端口443,需以 root 权限运行 Tomcat 或配置端口转发。certificateKeystoreFile:密钥库文件路径,相对 Tomcat 安装根目录。certificateKeystorePassword:密钥库的访问密码。certificateKeystoreType:指定密钥库类型,JKS 可省略,PFX 必须设为PKCS12。sslProtocol="TLS":明确启用 TLS 协议,禁用老旧不安全的 SSLv3 等协议。
🔄 重启 Tomcat 并测试 HTTPS 访问
保存 server.xml 后,重启 Tomcat 服务以应用更改:
# 启动服务
./bin/startup.sh
打开浏览器访问:
👉 https://your-domain:8443
如果页面加载正常,地址栏显示绿色锁形图标,且无任何安全警告,则表示 SSL 配置成功。
💡 建议使用 SSL Labs 的 SSL Test 工具 对站点进行评分检测,确保配置符合现代安全标准。
🔒 强制 HTTP 自动跳转 HTTPS(可选但推荐)
为了进一步提升安全性,建议强制所有请求通过 HTTPS 访问,可通过以下两种方式实现:
在 web.xml 中添加安全约束
编辑项目的 WEB-INF/web.xml 文件,加入如下配置:
<security-constraint>
<web-resource-collection>
<web-resource-name>Entire Application</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
在 server.xml 中确保 HTTP Connector 的 redirectPort 指向 HTTPS 端口:
<Connector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
当用户访问 http://your-domain:8080/app 时,会被自动重定向至 https://your-domain:8443/app。
结合反向代理(如 Nginx)实现统一 HTTPS 入口
在生产环境中,常采用 Nginx 或 Apache 作为前端反向代理,集中处理 SSL 加解密,再将请求转发给后端 Tomcat,这种方式性能更高、管理更灵活


