知識庫 / Spring / Spring Boot RSS 訂閱

Spring框架統一SSL支持

Spring Boot,Spring Security
HongKong
9
10:51 AM · Dec 06 ,2025

1. 介紹

在本教程中,我們將探討 SSL,它在安全通信中的重要性,以及 Spring 框架統一的 SSL 支持如何簡化模塊(如 Spring Boot、Spring Security 和 Spring Web)之間的配置。

SSL(安全套接層)是一種標準安全協議,它在 Web 服務器和瀏覽器之間建立加密鏈接,確保傳輸的數據保持私密和安全。它對於保護敏感信息和建立 Web 應用程序的信任至關重要。

2. 統一 SSL 支持的新功能

Spring Boot 3.1 引入了 SslBundle,這是一個集中式組件,用於定義和管理 SSL 配置。SslBundle 將與 SSL 相關的設置,包括密鑰存儲、信任存儲、證書和私鑰,整合為可重用的包,可以輕鬆應用於各種 Spring 組件。

主要亮點包括:

  • 集中式配置: SSL 屬性現在位於 spring.ssl.bundle 前綴下管理,為 SSL 設置提供單一的事實來源
  • 簡化管理: 該框架提供了清晰的默認值、更好的文檔以及擴展的支持,用於處理諸如雙向 SSL 認證或微調密碼套件之類的複雜用例
  • 改進的安全實踐: 內置功能確保符合現代安全標準,例如配置、支持 Java KeyStore (JKS)、PKCS12 和 PEM 編碼的證書,並提供輕鬆配置 HTTPS 強制執行的功能
  • 重新加載能力: SSL 包可以在密鑰材料更改時自動重新加載,從而在更新期間最大限度地減少停機時間

統一的 SSL 支持與各種 Spring 模塊兼容,包括 Web 服務器(Tomcat、Netty)、REST 客户端和數據訪問技術。 這確保了整個 Spring 生態系統中的一致的 SSL 體驗。

3. 在 Spring Boot 中設置 SSL

在 Spring Boot 中設置 SSL 非常簡單,並且具有統一的支持。

3.1. 通過屬性啓用 SSL

為了啓用 SSL,我們首先需要配置 application.propertiesapplication.yml

server:
  ssl:
    enabled: true
    key-store: classpath:keystore.p12
    key-store-password: password
    key-store-type: PKCS12

這允許啓用 SSL,並指定包含我們 SSL 證書的密鑰庫的位置、密碼和類型。

3.2. 配置 Keystore 和 Truststore 詳細信息

為了配置 Keystore,該 Keystore 包含我們服務器的證書和私鑰,可以使用以下屬性:

spring:
  ssl:
    bundle:
      jks:
        mybundle:
          keystore:
            location: classpath:application.p12
            password: secret
            type: PKCS12

對於一個信任存儲(truststore),它包含對受信任服務器的證書,我們需要添加以下屬性:

spring:
  ssl:
    bundle:
      jks:
        mybundle:
          truststore:
            location: classpath:application.p12
            password: secret

3.3. 設置自簽名和 CA 簽名證書

自簽名證書在測試或內部用途中非常有用。我們可以使用 keytool 命令生成一個:

$ keytool -genkeypair -alias myalias -keyalg RSA -keystore keystore.p12 -storetype PKCS12 -storepass password

對於生產環境,建議使用CA簽名證書。為了確保更高的安全性及可信度,我們可以從證書頒發機構(CA)獲取並將其添加到我們的密鑰存儲或信任存儲中。

4. Spring Security 與 SSL

Spring Security 與統一 SSL 支持無縫集成,確保安全通信和身份驗證。

統一 SSL 通過無縫集成 Spring Security,簡化了安全身份驗證。 開發人員可以使用 SslBundles 來建立客户端和服務器之間安全的連接。 我們可以進一步在我們的應用程序中強制使用 HTTPS。

以下配置可用於強制使用 HTTPS:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requiresChannel()
          .anyRequest()
          .requiresSecure();
    }
}

然後,為了增強安全性,我們應該啓用 HTTP 嚴格傳輸安全 (HSTS):

http.headers()
  .httpStrictTransportSecurity()
  .includeSubDomains(true)
  .maxAgeInSeconds(31536000); // 1 year

本政策確保瀏覽器僅通過 HTTPS 與我們的應用程序進行通信。

5. 定製 SSL 配置

精細調整 SSL 設置允許開發人員增強安全性、優化性能並滿足特定應用程序的需求。

5.1. 調整 SSL 協議和密碼套件

Spring 允許我們自定義支持的 SSL 協議和密碼套件,以增強安全性:

server:
  ssl:
    enabled-protocols: TLSv1.3,TLSv1.2
    ciphers: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

5.2. 使用程序化配置進行高級用例

對於高級場景,可能需要使用程序化配置:

HttpServer server = HttpServer.create()
  .secure(sslContextSpec -> sslContextSpec.sslContext(sslContext));

這種方法提供了對 SSL 設置的精細控制,尤其適用於動態環境。

5.3. 處理特定場景

我們可以通過使用統一 SSL 支持來處理特定場景。例如,啓用雙向 SSL 身份驗證:

// 雙向 SSL 身份驗證允許客户端和服務器之間進行驗證,
// 從而提高安全性。
server:
  ssl:
    client-auth: need

此設置確保服務器在 SSL 手動過程中需要有效的客户端證書。

6. 結論

在本文中,我們探討了 Spring Boot 3.1 的統一 SSL 支持,這使得在 Spring 應用中輕鬆配置 SSL。新的 <em >SslBundle</em> 集中管理 SSL 設置,允許開發者在一個地方管理證書、密鑰存儲和信任存儲。它簡化了安全通信,與 Spring Security 無縫集成,並有助於強制執行 HTTPS。

配置過程簡單易用,提供了啓用 SSL、設置密鑰存儲和自定義安全功能等清晰選項。開發者可以輕鬆調整 SSL 協議並處理諸如雙向身份驗證等高級場景。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.