如何在SpringBoot中設定TLS? |Baeldung

banq發表於2021-04-07

安全通訊在現代應用程式中起著重要作用。客戶端和伺服器之間透過純HTTP進行的通訊不安全。對於可用於生產的應用程式,我們應在應用程式中透過TLS(傳輸層安全性)協議啟用HTTPS。在本教程中,我們將討論如何在Spring Boot應用程式中啟用TLS技術。
 

1.生成金鑰對
要啟用TLS,我們需要建立一個公共/私有金鑰對。為此,我們使用keytool。該金鑰工具命令自帶預設的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

金鑰庫檔案可以在不同的格式。兩種最受歡迎​​的格式是Java KeyStore(JKS)和PKCS#12。JKS特定於Java,而PKCS#12是一種行業標準格式,屬於在公共金鑰密碼術標準(PKCS)下定義的一系列標準。
 

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應用程式即可。
  

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


trust-store指向的位置路徑是一個檔案,該檔案包含計算機為SSL伺服器身份驗證所信任的證照頒發機構的列表。需要trust-store-password才能訪問的密碼信任檔案。
 

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
curl -v http://localhost:8443/baeldung
由於我們未指定https,因此將輸出錯誤.透過使用https協議可以解決此問題:
curl -v https://localhost:8443/baeldung
但是,這給了我們另一個錯誤:
SSL certificate problem: self signed certificate
當我們使用自簽名證照時,會發生這種情況。要解決此問題,我們必須在客戶端請求中使用伺服器證照。首先,我們將從伺服器金鑰庫檔案中複製伺服器證照baeldung.cer。然後,我們將在curl請求中使用伺服器證照以及–cacert選項:
curl --cacert baeldung.cer https://localhost:8443/baeldung
 

相關文章