保护 Tomcat的基本任务之一是配置 SSL 证书,以便通过HTTPS访问 Web 应用程序。
有很多方法可以实现这一目标。
- 您可以在负载均衡器上终止 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
上述命令中有两个变量可能需要更改。
- 别名 - 最好让它有意义,以便将来您可以快速识别。我更喜欢将其保留为域名。
- 文件名——同样,保留域名是件好事。
前任:
[root@geekflare 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):
[root@geekflare ssl]#
注意名字和姓氏的问题。我认为这有点误导。这不是您的名字,而是您想要保护的域名。
提供所有信息后,它将在当前工作目录上创建一个密钥库文件。
接下来是 使用以下命令使用新创建的密钥库生成新的 CSR 。
keytool -certreq -alias bloggerflare -keyalg RSA -file bloggerflare.csr -keystore bloggerflare.jks
这将创建一个 CSR,您需要将其发送给证书颁发机构以对其进行签名。如果您在玩,那么您可以考虑使用免费的证书提供者,或者选择高级证书提供者。
我签署了证书,并将继续使用以下命令导入密钥库。
- 导入根证书由提供商提供
keytool -importcert -alias root -file root -keystore bloggerflare.jks
- 进口中间证书
keytool -importcert -alias intermediate -file intermediate -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"
- 不要忘记使用您的更改密钥库文件名和密码
- 重新启动 Tomcat,您应该会看到 Tomcat 可以通过 HTTPS 访问
甜的!
标准 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 的过程。