Spring框架統一SSL支持

Spring Boot,Spring Security
Remote
1
11:40 AM · Nov 30 ,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. 設置 SSL 在 Spring Boot 中的方法

    在 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. 配置密鑰存儲和信任存儲的詳細信息

    要配置密鑰存儲,即包含服務器的證書和私鑰,我們可以使用以下屬性:

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

    對於信任存儲,即包含受信任服務器的證書,我們需要添加以下屬性:

    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 認證:

    server:
      ssl:
        client-auth: need

    此設置確保服務器在 SSL 手動交換期間需要有效的客户端證書。

    6. 結論

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

    配置過程非常友好,提供了啓用 SSL、設置密鑰存儲和自定義安全功能明確的選項。開發人員可以輕鬆微調 SSL 協議並處理諸如雙向身份驗證之類的複雜場景。

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

發佈 評論

Some HTML is okay.