如何在Spring Boot應用程序中啟用TLS技術

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。

相關推薦
負載均衡器–系統設計面試問題

負載均衡器–系統設計面試問題,我們需要擴展服務器。這可以通過向網絡添加更多服務器並將所有請求分佈在這些服務器上來完成。但…。誰將決定哪個請求應該路由到哪個服務器

2020年11月1日閱讀 205

數字證書:如何將.cer文件導入到信任庫文件

了解一些可用於將.cer格式的證書導入到客戶端的信任庫中的工具, 我們討論了用於管理數字證書的兩種流行的SSL工具-OpenSSL和Java Keytool。我們進一步使用`keytool`和`openssl`命令將.cer格式的證書分別導入到JKS和PKCS12文件中。

2021年3月4日閱讀 153

在OkHTTP中添加攔截器

在本文中,我們學習了有關如何使用OkHttp創建攔截器的所有信息。首先,我們首先說明什麼是攔截器,以及如何定義一個簡單的日誌記錄攔截器來檢查我們的HTTP請求標頭。

2021年3月7日閱讀 138

獲取Java可信證書列表

通過快速而實際的示例,學習如何閱讀Java中的受信任證書列表。

2021年3月17日閱讀 144

如何在Apache HttpClient中設置TLS版本

在本文中,我們研究了使用Apache HttpClient庫時配置受支持的TLS版本的三種不同方式。我們已經了解瞭如何為所有連接或基於每個連接設置TLS版本。

2021年3月24日閱讀 305

使用Istio的服務網格架構

在本教程中,我們介紹了服務網格模式的基本概念以及它提供給我們的功能。特別是,我們詳細介紹了Istio。這涵蓋了Istio的核心體系結構及其基本組件。此外,我們詳細介紹了一些常見用例的安裝和使用Istio的細節。

2021年4月13日閱讀 224