在 Tomcat 服务器上配置 SSL/TLS 证书的详细指南
为 Tomcat 服务器配置 SSL 证书是保障 Web 应用安全的关键步骤,确保用户可以通过 HTTPS 安全访问应用。
实现 HTTPS 的方法有很多种,例如:
- 在负载均衡器上终止 SSL 连接。
- 在 CDN (内容分发网络) 层级实施 SSL。
- 使用 Apache、Nginx 等 Web 服务器作为前端,并在这些服务器上配置 SSL。
但是,如果您的架构不包含上述任何方案,或者您需要直接在 Tomcat 中配置 SSL,那么本文将为您提供详细的指导。
本文将涵盖以下几个方面:
- 生成 CSR (证书签名请求)。
- 将证书导入到密钥库文件中。
- 在 Tomcat 中启用 SSL。
- 配置 TLS 协议。
- 将 Tomcat 配置为监听 443 端口。
- 测试 Tomcat 的 SSL 安全性。
让我们开始吧!
准备 SSL/TLS 证书
第一步是生成 CSR,然后将其提交给证书颁发机构进行签名。我们将使用 keytool
工具来管理证书。
- 登录到 Tomcat 服务器。
- 进入 Tomcat 安装目录。
- 创建一个名为
ssl
的文件夹。 - 执行命令创建密钥库。
keytool -genkey -alias domainname -keyalg RSA -keysize 2048 -keystore filename.jks
上述命令中有两个变量需要您根据实际情况进行更改:
alias
:建议使用有意义的别名,方便日后识别。 我建议使用域名作为别名。filename
:同样,使用域名作为文件名是一个不错的选择。
例如:
[user@example ssl]# keytool -genkey -alias bloggerflare -keyalg RSA -keysize 2048 -keystore bloggerflare.jks
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: bloggerflare.com
What is the name of your organizational unit?
[Unknown]: Blogging
What is the name of your organization?
[Unknown]: Geek Flare
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=bloggerflare.com, OU=Blogging, O=Geek Flare, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes
Enter key password for <bloggerflare>
(RETURN if same as keystore password):
[user@example ssl]#
注意,“名字和姓氏”的问题实际上指的是您要保护的域名,而不是您的个人信息。
提供所有必要的信息后,该命令会在当前目录下生成一个密钥库文件。
接下来,使用以下命令,通过新创建的密钥库文件生成 CSR:
keytool -certreq -alias bloggerflare -keyalg RSA -file bloggerflare.csr -keystore bloggerflare.jks
您需要将生成的 CSR 发送给证书颁发机构进行签名。如果您是初学者,可以考虑使用免费的证书提供商,或者选择更高级的商业证书。
我已签署了证书,接下来使用以下命令将其导入密钥库:
- 导入由证书提供商提供的根证书。
keytool -importcert -alias root -file root.cer -keystore bloggerflare.jks
- 导入中间证书。
keytool -importcert -alias intermediate -file intermediate.cer -keystore bloggerflare.jks
注意:如果不导入根证书和中间证书,您将无法将域名证书导入密钥库。如果有多个中间证书,您需要将它们全部导入。
- 导入域名证书。
keytool -importcert -file bloggerflare.cer -keystore bloggerflare.jks -alias bloggerflare
完成导入后,您将收到一条确认消息,表示证书已成功安装到密钥库中。
太棒了!现在密钥库已经准备就绪,接下来进行下一步。
如果您对 SSL 知识尚不熟悉,并希望深入了解,可以考虑报名参加这个在线课程 – SSL/TLS 操作。
在 Tomcat 中启用 SSL
假设您仍然登录到 Tomcat 服务器,请转到 conf
文件夹。
- 备份
server.xml
文件。 - 找到
<Connector port="8080" protocol="HTTP/1.1">
部分,并添加以下一行:
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
- 请务必将
keystoreFile
和keystorePass
的值替换为您实际的文件名和密码。 - 重新启动 Tomcat 服务器,现在您应该可以通过 HTTPS 访问 Tomcat 了。
成功!
设置标准 HTTPS 端口
为什么需要设置标准端口?
如果观察上面的截图,我正在通过 https://
+ 8080端口
访问 Tomcat,这并非标准做法。还有其他一些原因:
- 您不希望用户记住自定义端口号。
- 浏览器可能会发出警告,因为证书是针对没有端口的域名颁发的。
因此,我们需要配置 Tomcat 监听 443 端口,以便可以通过 https://
直接访问,而无需指定端口号。
为此,请使用您喜欢的编辑器编辑 server.xml
文件。
- 找到
<Connector port="8080"
。 - 将端口号从 8080 更改为 443。
- 更改后应如下所示:
<Connector port="443" protocol="HTTP/1.1"
connectionTimeout="20000"
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
redirectPort="8443" />
- 重新启动 Tomcat 并使用
https://
访问您的应用,无需指定端口号。
太棒了,我们成功了!
SSL/TLS 安全性测试
最后,我们需要进行安全性测试,以确保我们的配置不会受到在线威胁。
我之前分享了很多在线测试工具,这里我将使用 SSL Labs。
- 访问 SSL Labs 并输入您的 URL 开始测试。
它显示绿色,表示评级良好。
但是,我仍然建议您仔细查看报告,找出任何潜在的漏洞并修复它们。
这就是今天的全部内容。
希望本文能帮助您了解如何使用 SSL/TLS 证书来保护 Tomcat 服务器。如果您有兴趣进一步学习,我强烈推荐这个 课程。