Tomcat9安装SSL证书的详细步骤与配置指南
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
美国云虚拟主机 助力出海企业低成本上云 WAF网站防火墙 为您的业务网站保驾护航
在当今互联网安全日益受到重视的背景下,为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,这种方式性能更高、管理更灵活