在当今的互联网环境中,数据安全至关重要,为网站配置 SSL/TLS 证书,实现 HTTPS 加密传输,已成为保护用户数据、提升网站可信度的标准做法,本文将详细介绍如何在 CentOS 7 操作系统上为 Apache Tomcat 服务器配置 SSL,确保您的 Web 应用能够通过安全的 HTTPS 协议进行访问。
准备工作
在开始配置之前,请确保您的环境满足以下基本条件:
- 一台已安装并正常运行 CentOS 7 的服务器。
- 服务器上已成功安装并可以启动 Tomcat(本文以 Tomcat 9 为例,但步骤同样适用于其他主流版本)。
- 拥有服务器的 root 权限或 sudo 权限。
- 一个 SSL 证书,您可以选择从受信任的证书颁发机构(CA)购买,或为了测试目的生成一个自签名证书。
第一步:生成密钥库和自签名证书
对于开发、测试或内部系统,使用 Java 自带的 keytool
工具生成自签名证书是最快捷的方式,该工具会创建一个包含公钥和私钥的密钥库文件。
创建密钥库目录(建议将密钥库存放在 Tomcat 目录下,便于管理):
sudo mkdir -p /usr/local/tomcat/keystore
生成证书:
执行以下命令,系统会提示您输入一些信息,如组织单位、城市、国家代码等,请根据实际情况填写,名字与姓氏”一项应填写您的域名或服务器 IP 地址。sudo keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore/tomcat.keystore -validity 3650 -keysize 2048
命令参数解释:
-genkeypair
: 生成密钥对。-alias tomcat
: 为密钥指定一个别名,便于在 Tomcat 配置中引用。-keyalg RSA
: 指定密钥算法为 RSA,这是最常用的算法。-keystore
: 指定密钥库文件的存储路径和名称。-validity 3650
: 设置证书的有效期,这里设置为 3650 天(10年)。-keysize 2048
: 指定密钥长度为 2048 位,安全性较高。
执行过程中,您需要设置一个密钥库密码,请务必记住这个密码,后续配置 Tomcat 时会用到。
第二步:配置 Tomcat 的 server.xml 文件
证书生成后,需要修改 Tomcat 的主配置文件 server.xml
,启用 SSL 连接器。
编辑配置文件:
sudo vi /usr/local/tomcat/conf/server.xml
修改或添加 Connector:
在<Service>
标签内,找到被注释的 SSL Connector 配置(通常以<!--
和-->
包裹),取消注释并进行修改,如果没有,则手动添加一个新的<Connector>
元素。一个典型的配置如下所示:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/usr/local/tomcat/keystore/tomcat.keystore" keystorePass="your_keystore_password" />
配置项说明:
port="8443"
: 指定 HTTPS 的监听端口,8443 是 Tomcat 的默认 HTTPS 端口。protocol
: 推荐使用Http11NioProtocol
,它能提供更好的性能和可伸缩性。SSLEnabled="true"
: 启用 SSL 支持。clientAuth="false"
: 表示不需要对客户端进行认证,如果设置为true
,则服务器会要求客户端也提供证书,实现双向认证。sslProtocol="TLS"
: 指定使用的安全协议,TLS 是 SSL 的继任者,更安全。keystoreFile
: 指定第一步中创建的密钥库文件的完整路径。keystorePass
: 填写您在创建密钥库时设置的密码。
第三步:配置防火墙
为了让外部客户端能够访问新配置的 8443 端口,需要在 CentOS 7 的防火墙中开放该端口,CentOS 7 默认使用 firewalld
。
# 永久开放 8443 端口 sudo firewall-cmd --permanent --add-port=8443/tcp # 重新加载防火墙配置使更改生效 sudo firewall-cmd --reload
您可以执行 sudo firewall-cmd --list-ports
来验证端口是否已成功开放。
第四步:重启 Tomcat 并验证
所有配置完成后,重启 Tomcat 服务以使更改生效。
进入 Tomcat 的 bin 目录:
cd /usr/local/tomcat/bin
执行关闭和启动脚本:
sudo ./shutdown.sh sudo ./startup.sh
验证:
在浏览器中访问https://your_server_ip:8443
。- 如果您使用的是自签名证书,浏览器会显示一个“您的连接不是私密连接”的警告,这是正常现象,因为浏览器不信任您自己签发的证书,点击“高级”或“继续前往…”即可继续访问。
- 如果页面能正常加载 Tomcat 的默认主页,并且地址栏显示一个锁形图标(可能带警告标志),则说明 SSL 配置成功。
对于生产环境,强烈建议使用由受信任的 CA(如 Let’s Encrypt、DigiCert 等)颁发的证书,配置过程类似,只是您需要从 CA 处获取证书文件,并使用 keytool
将其导入到密钥库中,或者直接配置 Tomcat 使用 PEM 格式的证书和私钥文件(需要额外的连接器如 tcnative)。
相关问答 FAQs
问题 1:我已经按照步骤配置了,但无法通过 HTTPS 访问,应该从哪里开始排查?
解答:排查此类问题,建议遵循以下顺序:
- 检查防火墙:确认 8443 端口已在
firewalld
中正确开放,并已重新加载。 - 检查 Tomcat 日志:查看
$CATALINA_HOME/logs/catalina.out
文件,启动时是否有关于 SSL 或密钥库的错误信息,例如密码错误、文件路径不正确或文件损坏。 :仔细检查 keystoreFile
和keystorePass
的值是否与您创建的密钥库完全匹配,包括路径和密码的大小写。- 确认端口未被占用:使用
netstat -tlnp | grep 8443
命令检查 8443 端口是否已被 Tomcat 进程监听。 - 检查 Tomcat 是否成功启动:确保 Tomcat 服务本身没有因其他配置错误而启动失败。
问题 2:自签名证书和 CA 颁发的证书有什么核心区别?我应该在什么场景下使用?
解答:核心区别在于“信任”。
- 自签名证书:由您自己创建和签名,没有经过任何受信任的第三方机构验证,浏览器和操作系统默认不信任它,因此会向用户显示安全警告。
- 适用场景:非常适合开发环境、测试环境或公司内部系统,在这些场景下,通信的双方是已知的,可以手动信任该证书,实现零成本的加密通信。
- CA 颁发的证书:由全球受信任的证书颁发机构(CA)签发,CA 会对申请者的身份进行验证,因此浏览器和操作系统内置了这些 CA 的根证书,从而自动信任由其颁发的证书,用户访问时不会看到安全警告,地址栏会显示安全锁。
- 适用场景:所有面向公众的生产环境网站,如电子商务、在线银行、企业官网等,使用 CA 证书可以建立用户信任,是专业和安全的象征。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复