Tomcat如何添加SSL证书详细配置指南
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
美国云虚拟主机 助力出海企业低成本上云 WAF网站防火墙 为您的业务网站保驾护航
在当今高度互联的网络环境中,数据安全已成为网站与应用开发中不可忽视的核心议题,随着用户隐私保护意识的增强和网络安全法规的不断完善,保障客户端与服务器之间的通信加密已不再是可选项,而是基本要求,为此,越来越多的网站选择采用 HTTPS 协议 来提升安全性,作为广泛应用的 Java Web 应用服务器,Apache Tomcat 支持通过配置 SSL(Secure Sockets Layer)或其更安全的继任者 TLS(Transport Layer Security)来启用 HTTPS 加密连接。
什么是 SSL/TLS 证书?
SSL(安全套接层)及其升级版 TLS(传输层安全)是一种用于在客户端与服务器之间建立加密通道的安全协议。SSL 证书 是一种数字身份凭证,由受信任的第三方机构——证书颁发机构(CA, Certificate Authority) 签发,主要作用包括:
- 验证服务器身份:防止中间人攻击(MITM),确保用户访问的是真实的服务器。
- 启用加密通信:使用公钥加密技术对传输的数据进行加密,防止敏感信息被窃听或篡改。
- 建立信任链:浏览器通过验证证书链判断该站点是否可信。
证书通常以 .crt
或 .pem
格式存在,同时需要配套的私钥文件(.key
)以及可选的中间证书(Intermediate CA),共同构成完整的信任路径,对于生产环境,建议使用权威 CA 如 Let's Encrypt、DigiCert、阿里云、腾讯云等签发的证书;而在开发测试阶段,则可使用自签名证书快速搭建 HTTPS 环境。
配置前的准备工作
在开始配置之前,请确保已完成以下准备工作:
-
✅ 获取有效的 SSL 证书
- 正式环境:从合法 CA 申请证书,包含:
- 服务器证书(如
domain.crt
) - 私钥文件(如
private.key
) - 中间证书(如
intermediate.crt
,用于构建完整信任链)
- 服务器证书(如
- 测试环境:可通过 Java 自带工具
keytool
生成自签名证书。
- 正式环境:从合法 CA 申请证书,包含:
-
✅ 确认 JDK 安装并可用
- Tomcat 使用 Java 的
keytool
工具管理密钥库(keystore),请确保已安装 JDK 并能正常调用keytool
命令(位于$JAVA_HOME/bin/keytool
)。
- Tomcat 使用 Java 的
-
✅ 确定 HTTPS 监听端口
- HTTPS 默认使用 443 端口,但出于权限限制或调试目的,常使用 8443 作为替代端口。
- 若需绑定 443 端口,在 Linux 系统下可能需要 root 权限或设置端口转发。
-
✅ 备份原始配置文件
- 修改
server.xml
前建议先备份,避免配置错误导致服务无法启动。
- 修改
使用 Keytool 生成自签名证书(适用于开发/测试)
对于本地开发、内部测试或演示环境,可以使用 Java 自带的 keytool
工具快速生成一个自签名证书。
执行命令生成密钥对与证书
打开终端,运行以下命令:
keytool -genkeypair \ -alias tomcat \ -keyalg RSA \ -keystore /path/to/tomcat/conf/.keystore \ -validity 365 \ -keysize 2048 \ -storepass changeit \ -keypass changeit
⚠️ 注意:路径
/path/to/Tomcat/conf/.keystore
需替换为实际的 Tomcat 安装路径。
参数说明:
参数 | 含义 |
---|---|
-alias tomcat |
密钥别名,Tomcat 默认查找名为 tomcat 的条目 |
-keyalg RSA |
使用 RSA 加密算法 |
-keystore |
指定密钥库存储路径 |
-validity 365 |
证书有效期为 365 天 |
-keysize 2048 |
密钥长度为 2048 位,符合当前安全标准 |
-storepass / -keypass |
密钥库密码与密钥密码(建议统一设置) |
执行过程中会提示输入“姓名”、“组织单位”、“城市”等信息,这些信息主要用于标识用途,可根据实际情况填写,完成后将在指定目录生成 .keystore
文件。
导入第三方签发的证书(推荐用于生产环境)
若已有由权威 CA 签发的 PEM 格式证书(如 Nginx 或 Apache 使用的证书),需将其转换为 Java 可识别的 JKS 或 PKCS12 格式。
第一步:合并证书并导出为 PKCS12 格式
假设你拥有以下三个文件:
server.crt
:服务器证书intermediate.crt
:中间证书server.key
:私钥文件
首先合并证书链:
cat server.crt intermediate.crt > fullchain.crt
然后使用 OpenSSL 将证书与私钥打包成 PKCS12 格式:
openssl pkcs12 -export \ -in fullchain.crt \ -inkey server.key \ -out server.p12 \ -name tomcat \ -CAfile intermediate.crt \ -caname root
提示输入导出密码(记牢此密码,后续导入时需使用)。
第二步:使用 keytool 导入至 Java Keystore
keytool -importkeystore \ -deststorepass changeit \ -destkeypass changeit \ -destkeystore /path/to/tomcat/conf/.keystore \ -srckeystore server.p12 \ -srcstoretype PKCS12 \ -srcstorepass your_export_password \ -alias tomcat
📌
changeit
是 Tomcat 默认的密钥库密码,强烈建议在生产环境中修改为高强度密码。
证书已成功导入 Java 密钥库,可用于 Tomcat 启动 HTTPS 服务。
配置 Tomcat 的 server.xml
文件
完成证书准备后,下一步是修改 Tomcat 主配置文件以启用 SSL 连接。
步骤如下:
- 打开
$CATALINA_HOME/conf/server.xml
文件。 - 查找注释掉的 HTTPS Connector 示例段落:
<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/.keystore" type="RSA" /> </SSLHostConfig> </Connector> -->
- 取消注释并修改配置,根据实际情况调整参数:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="200" SSLEnabled="true" scheme="https" secure="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="/path/to/tomcat/conf/.keystore" certificateKeystorePassword="changeit" type="RSA" /> </SSLHostConfig> </Connector>
关键参数解析:
属性 | 说明 |
---|---|
port |
HTTPS 监听端口,常用 8443 或 443 |
protocol |
推荐使用 NIO 协议以提高性能 |
certificateKeystoreFile |
密钥库文件绝对路径或相对于 CATALINA_HOME 的相对路径 |
certificateKeystorePassword |
密钥库密码 |
scheme 和 secure |
明确标记为 HTTPS 请求,有助于应用逻辑判断 |
💡 特别提醒:
若希望监听 443 端口,在 Linux 系统中非 root 用户无法直接绑定低端口号,解决方法包括:
- 使用
sudo
启动 Tomcat(不推荐)- 配置 iptables 进行端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
- 使用 systemd 设置
CAP_NET_BIND_SERVICE
能力
强制 HTTP 自动跳转 HTTPS(增强安全性)
为了进一步提升安全性,建议强制所有 HTTP 请求重定向到 HTTPS。
在 Web 应用的 web.xml
中添加安全约束:
<security-constraint> <web-resource-collection> <web-resource