拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何在Spring Boot应用程序中启用TLS技术

如何在Spring Boot应用程序中启用TLS技术

白鹭 - 2021-11-24 1222 0 0

1.概述

安全通信在现代应用程序中起着重要作用。客户端和服务器之间通过纯HTTP进行的通信不安全。对于可用于生产的应用程序,我们应在应用程序中通过TLS(传输层安全性)协议启用HTTPS。在本教程中,我们将讨论如何在Spring Boot应用程序中启用TLS技术。

2. TLS协议

TLS为客户端和服务器之间传输的数据提供保护,并且是HTTPS协议的关键组成部分。安全套接字层(SSL)和TLS通常可以互换使用,但是它们并不相同。实际上,TLS是SSL的后继产品。 TLS可以单向或双向实现。

2.1 单向TLS

在单向TLS中,只有客户端才能验证服务器,以确保它从受信任的服务器接收数据。为了实现单向TLS,服务器与客户端共享其公共证书。

2.2 双向TLS

在双向TLS或相互TLS(mTLS)中,客户端和服务器都相互进行身份验证,以确保通信中涉及的双方都是受信任的。为了实施mTLS,双方要相互共享其公共证书。

3.在Spring Boot中配置TLS

3.1 生成密钥对

要启用TLS,我们需要创建一个公钥/私钥对。为此,我们使用keytoolkeytool命令随附于默认的Java发行版。让我们使用keytool生成密钥对并将其存储在keystore.p12文件中:

keytool -genkeypair -alias baeldung -keyalg RSA -keysize 4096 \

 -validity 3650 -dname "CN=localhost" -keypass changeit -keystore keystore.p12 \

 -storeType PKCS12 -storepass changeit

keystore文件可以采用不同的格式。两种最受欢迎的格式是Java KeyStore(JKS)和PKCS#12。 JKS特定于Java,而PKCS#12是一种行业标准格式,属于在公共密钥密码术标准(PKCS)下定义的一系列标准。

3.2 在Spring中配置TLS

让我们从配置单向TLS开始。 application.properties文件中配置与TLS相关的属性:

# enable/disable https

 server.ssl.enabled=true

 # keystore format

 server.ssl.key-store-type=PKCS12

 # keystore location

 server.ssl.key-store=classpath:keystore/keystore.p12

 # keystore password

 server.ssl.key-store-password=changeit

在配置SSL协议时,我们将使用TLS,并告诉服务器使用TLS 1.2:

# SSL protocol to use

 server.ssl.protocol=TLS

 # Enabled SSL protocols

 server.ssl.enabled-protocols=TLSv1.2

为了验证一切正常,我们只需要运行Spring Boot应用程序即可:

Spring的TLS设置

3.3 在Spring中配置mTLS

为了启用mTLS,我们将client-auth属性与need值一起使用:

server.ssl.client-auth=need

当我们使用need值时,客户端身份验证是必需的,也是强制性的。这意味着客户端和服务器都必须共享其公共证书。为了将客户端的证书存储在Spring Boot应用程序中,我们使用truststore文件并在application.properties文件中对其进行配置:

#trust store location

 server.ssl.trust-store=classpath:keystore/truststore.p12

 #trust store password

 server.ssl.trust-store-password=changeit

truststore位置的路径是一个文件,该文件包含计算机为SSL服务器身份验证所信任的证书颁发机构的列表。 truststore密码是用于访问truststore文件的密码。

4.在Tomcat中配置TLS

默认情况下,启动Tomcat时将使用没有任何TLS功能的HTTP协议。为了在Tomcat中启用TLS,我们配置server.xml文件:

<Connector

 protocol="org.apache.coyote.http11.Http11NioProtocol"

 port="8443" maxThreads="200"

 scheme="https" secure="true" SSLEnabled="true"

 keystoreFile="${user.home}/.keystore" keystorePass="changeit"

 clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2"/>

为了启用mTLS,我们将设置clientAuth=”true”

5.调用HTTPS API

为了调用REST API,我们将使用curl工具:

curl -v http://localhost:8443/baeldung

由于我们未指定https ,因此将输出错误:

Bad Request

 This combination of host and port requires TLS.

https协议可以解决此问题:

curl -v https://localhost:8443/baeldung

但是,这给了我们另一个错误:

SSL certificate problem: self signed certificate

当我们使用自签名证书时,会发生这种情况。要解决此问题,我们必须在客户端请求中使用服务器证书。首先,我们将从服务器keystore文件中baeldung.cer然后,我们将在curl请求中–cacert选项:

curl --cacert baeldung.cer https://localhost:8443/baeldung

六,结论

为了确保在客户端和服务器之间传输的数据的安全性,可以单向或双向实现TLS。 application.properties文件和Tomcat配置文件中描述如何在Spring Boot应用程序中配置TLS。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *