合并证书和中间证书
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
美国云虚拟主机 助力出海企业低成本上云 WAF网站防火墙 为您的业务网站保驾护航
引言:为什么需要 HTTPS?
在当今互联网环境中,数据安全已成为网站和应用开发的基石,随着用户隐私意识的提升以及主流搜索引擎(如 Google)对 HTTPS 网站的优先索引策略,启用加密传输协议已不再是“可选项”,而是现代 Web 应用部署的基本标准。
Apache Tomcat 作为最广泛使用的 Java Web 容器之一,原生支持通过配置 SSL/TLS 协议来启用 HTTPS 加密通信,本文将系统地介绍如何在 Tomcat 服务器上部署 SSL 证书,涵盖从环境准备、证书获取、格式转换、服务配置到最终验证与安全优化的全过程,帮助开发者与运维人员高效完成 HTTPS 的搭建工作。
SSL/TLS 与 HTTPS 基础知识
SSL(Secure Sockets Layer)是早期的安全套接层协议,其后续演进版本为 TLS(Transport Layer Security),两者常被统称为 SSL/TLS,它们的作用是在客户端(如浏览器)与服务器之间建立一条加密通道,确保数据在传输过程中不被窃听、篡改或伪造。
HTTPS 实质上就是 HTTP 协议叠加了 SSL/TLS 加密层,即:
HTTPS = HTTP + SSL/TLS
要启用 HTTPS,服务器必须持有由受信任的证书颁发机构(CA, Certificate Authority)签发的有效 SSL 证书,该证书包含以下关键信息:
- 绑定的域名
- 公钥信息
- 有效期
- 签发机构(CA)
- 数字签名及证书链
当用户访问 HTTPS 站点时,浏览器会验证证书合法性,并协商加密算法,从而实现端到端的数据保护。
部署前的准备工作
在开始配置之前,请确认以下条件均已满足:
-
✅ Java 运行环境已安装
- Tomcat 依赖 JVM 运行,需确保 JDK 或 JRE 已正确安装并配置好
JAVA_HOME
环境变量。 - 推荐使用 Java 8 及以上版本以获得更好的性能和安全性支持。
- Tomcat 依赖 JVM 运行,需确保 JDK 或 JRE 已正确安装并配置好
-
✅ Tomcat 服务正常运行
- 建议使用 Tomcat 8.5 或更高版本,因其对 TLS 1.2/1.3 支持更完善,且具备更强的安全特性。
- 启动
$CATALINA_HOME/bin/startup.sh
并访问http://localhost:8080
确认服务可用。
-
✅ 已准备好 SSL 证书文件 通常包括三个核心组件:
- 服务器证书(Server Certificate):
example.com.crt
- 私钥文件(Private Key):
example.com.key
- 中间证书链(Intermediate CA Bundle):
ca-bundle.crt
,用于构建完整的信任链
- 服务器证书(Server Certificate):
-
✅ 域名解析已完成
确保目标域名已正确指向当前服务器 IP 地址,并可通过公网访问。
获取 SSL 证书的方式
您可以选择以下任一方式获取合法有效的 SSL 证书:
免费证书(推荐个人/测试项目使用)
- 使用 Let’s Encrypt 提供的自动化免费证书。
- 搭配工具如 Certbot 可实现自动申请、部署与续期。
- 支持通配符证书(Wildcard),适合多子域场景。
商业证书(适用于企业生产环境)
- 来自权威 CA 机构,如 DigiCert、GlobalSign、Sectigo、阿里云、腾讯云等。
- 提供更高的保障级别(如 EV 证书)、技术支持和保险赔付。
- 更易被老旧设备或特定网络环境信任。
📌 示例中我们假设已获得如下三个文件:
example.com.crt
—— 服务器证书example.com.key
—— 私钥文件ca-bundle.crt
—— 中间证书集合
证书格式转换:PEM → PKCS12 → JKS
Tomcat 默认使用 Java KeyStore(JKS)格式管理密钥与证书,而大多数外部签发的证书为 PEM 格式(文本编码的 Base64 数据),因此需要进行格式转换。
第一步:合并证书并生成 PKCS12 文件
首先将服务器证书与中间证书合并成一个 .crt
文件:
cat example.com.crt ca-bundle.crt > combined.crt
然后使用 OpenSSL 将私钥和合并后的证书打包为 PKCS12 格式:
openssl pkcs12 -export \ -in combined.crt \ -inkey example.com.key \ -out tomcat.p12 \ -name "tomcat" \ -CAfile ca-bundle.crt \ -caname root \ -chain
执行过程中会提示设置导出密码(建议设为强密码并妥善保管),生成的 tomcat.p12
包含私钥、服务器证书和完整的证书链。
第二步:将 PKCS12 转换为 JKS 格式
使用 Java 自带的 keytool
工具将其转换为 JKS:
keytool -importkeystore \ -srckeystore tomcat.p12 \ -srcstoretype PKCS12 \ -destkeystore keystore.jks \ -deststoretype JKS
系统将要求输入源密钥库密码(即上一步设置的 p12 密码)以及目标 JKS 的新密码(记牢此密码,后续配置需要用到)。
最终得到 keystore.jks
文件,建议将其放置于 Tomcat 的 conf/
目录下:
mv keystore.jks $CATALINA_HOME/conf/
同时设置适当权限,防止未授权访问:
chmod 600 $CATALINA_HOME/conf/keystore.jks chown tomcat:tomcat $CATALINA_HOME/conf/keystore.jks # 若以 tomcat 用户运行
⚠️ 注意:若希望避免格式转换,也可直接在
server.xml
中使用 PKCS12 类型(见后文说明)。
配置 Tomcat 的 server.xml 文件
进入 $CATALINA_HOME/conf/server.xml
,查找默认被注释掉的 <Connector>
段落,或手动添加一个新的 HTTPS 连接器。
配置示例(使用 JKS 格式)
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="${catalina.base}/conf/keystore.jks" certificateKeystorePassword="your_keystore_password" type="RSA" /> </SSLHostConfig> </Connector>
参数详解:
属性 | 说明 |
---|---|
port="8443" |
HTTPS 默认端口;如需使用标准端口 443 ,需以 root 权限启动 Tomcat。 |
protocol |
推荐使用 NIO 协议(Http11NioProtocol )提升并发处理能力。 |
certificateKeystoreFile |
指向 JKS 或 PKCS12 文件路径,使用 ${catalina.base} 变量更具移植性。 |
certificateKeystorePassword |
创建 JKS 时设定的密码。 |
type="RSA" |
密钥类型,若使用 ECC 证书则改为 EC 。 |
替代方案:直接使用 PKCS12(无需转 JKS)
如果您保留了 .p12
文件,可以直接指定类型为 PKCS12,省去转换步骤:
<Certificate certificateKeystoreType="PKCS12" certificateKeystoreFile="${catalina.base}/conf/tomcat.p12" certificateKeystorePassword="your_p12_password" type="RSA" />
重启 Tomcat 并验证 HTTPS 访问
修改完成后保存配置文件,重启 Tomcat 服务:
$CATALINA_HOME/bin/shutdown.sh $CATALINA_HOME/bin/startup.sh
打开浏览器访问:
https://your-domain.com:8443
如果一切正常,您应看到:
- 页面成功加载
- 浏览器地址栏显示锁形图标 🔒
- 点击证书详情,确认: