SpringBoot配置HTTPS

一、SpringBoot配置文件

通過配置文件來進行HTTPS配置是最常見的方式。SpringBoot提供了方便的配置方式,在application.properties或者application.yml中配置即可。

application.properties文件配置示例

    server.port=8443
    server.ssl.key-store-type=PKCS12
    server.ssl.key-store=classpath:keys/keystore.p12
    server.ssl.key-store-password=password
    server.ssl.key-alias=tomcat

application.yml文件配置示例

    server:
      port: 8443
      ssl:
        key-store-type: PKCS12
        key-store: classpath:keys/keystore.p12
        key-store-password: password
        key-alias: tomcat

在上面的示例中,我們指定了服務的端口為8443,選擇了key-store-type為PKCS12格式,key-store指向classpath下的keystore.p12文件,key-store-password指定了密碼,key-alias指定了證書的別名。

二、SpringBoot配置SSL

SpringBoot默認開啟了SSL,如果需要關閉,可以在application.properties中設置server.ssl.enabled=false。

如果需要自定義SSL配置,可以通過編碼實現。在SpringBoot2.0之前,可以通過配置ServerProperties來實現SSL的配置。

示例:

@Configuration
public class SslConfig extends WebServerFactoryCustomizerConfigurableWebServerFactory> {
    @Override
    public void customize(WebServerFactory factory) {
        Ssl ssl = new Ssl();
        // Server.jks中包含了https證書和私鑰;keystore.password是證書密碼
        //,請確保修改為自己證書的密碼
        ssl.setKeyStore("classpath:server.jks");
        ssl.setKeyStorePassword("keystore.password");
        factory.setSsl(ssl);
        factory.setPort(8443);
    }
}

在SpringBoot2.0中,使用SslStoreProvider來進行SSL的配置。

SslStoreProvider

@Component
public class SslServerProvider implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>{
    @Autowired
    private SslPropertiesConfig sslPropertiesConfig;
    @Override
    public void customize(ConfigurableServletWebServerFactory factory) {
        sslPropertiesConfig.getSsl().setSslProvider(SslProvider.OPENSSL);
        sslPropertiesConfig.getSsl().setKeyStore(new ClassPathResource("server.jks"));
        sslPropertiesConfig.getSsl().setKeyStorePassword("keystore.password");
        factory.setSsl(sslPropertiesConfig.getSsl());
    }
}

三、SpringBoot配置類

通過配置類進行SSL的配置是比較靈活的方式。可以通過注入的方式對SSL具體參數進行配置。其中SSL的配置參數可以在SslConfiguration中進行配置。

示例:

@Configuration
public class SslConfiguration {

    @Bean
    public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> webServerFactoryCustomizer() {
        return (factory) -> {
            Ssl ssl = getSsl();
            ssl.setCiphers(Arrays.asList("TLS_RSA_WITH_AES_128_CBC_SHA256", "TLS_RSA_WITH_AES_128_CBC_SHA"));
            factory.setSsl(ssl);
        };
    }

    public Ssl getSsl() {
        Ssl ssl = new Ssl();
        ssl.setKeyStore("classpath:server.jks");
        ssl.setKeyStorePassword("server-password");
        ssl.setKeyAlias("server-key-alias");
        return ssl;
    }
}

四、SpringBoot配置中心

如果需要在更改參數的情況下動態刷新SSL的配置,可以使用Spring Cloud Config等工具,將SSL配置參數進行熱更新。

五、SpringBoot配置順序

對於SpringBoot來說,不同的配置方式有不同的優先級。按照優先級的順序,配置順序依次是:

  • Embedded Servlet Container Customizer Bean
  • 命令行參數
  • JNDI屬性
  • ServletWebServerFactory配置的ContextParameters
  • ServletContextInitializer Beans
  • SpringApplicationBuilder的properties方法
  • application.properties文件中的屬性
  • application.yml文件中的屬性

六、SpringBoot配置原理

SpringBoot的SSL配置原理是通過在ServerProperties中封裝了Ssl、SslStoreProvider等操作。同時,ServerProperties中也提供了一些默認的SSL配置。

七、SpringBoot常用配置

  • HTTPS配置:server.ssl.key-store(key-store文件路徑)、server.ssl.key-store-password(key-store密碼)、server.ssl.key-alias(別名)等
  • HTTP端口配置:server.port(端口號)
  • Context Path配置:server.servlet.context-path(應用上下文的路徑)
  • 連接超時配置:server.connection-timeout(連接超時時間)
  • 線程池配置:server.tomcat.max-threads(最大線程數)、server.tomcat.min-spare-threads(最小空閑線程數)等

原創文章,作者:RZJD,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150239.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RZJD的頭像RZJD
上一篇 2024-11-07 09:50
下一篇 2024-11-07 09:50

相關推薦

  • 從ga角度解讀springboot

    springboot作為目前廣受歡迎的Java開發框架,其中的ga機制在整個開發過程中起着至關重要的作用。 一、ga是什麼 ga即Group Artifacts的縮寫,它是Mave…

    編程 2025-04-29
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27
  • SpringBoot如何設置不輸出Info日誌

    本篇文章將帶您了解如何在SpringBoot項目中關閉Info級別日誌輸出。 一、為什麼要關閉Info日誌 在開發中,我們經常會使用Log4j、Logback等框架來輸出日誌信息,…

    編程 2025-04-27
  • HTTPs請求URL里的參數會加密嗎?

    是的,HTTPS請求URL里的參數會加密。HTTPS是HTTP協議的加密版本,在傳輸數據時,使用了SSL/TLS協議對傳輸內容進行加密,保證數據在傳輸過程中不會被篡改、竊取。下面我…

    編程 2025-04-27
  • 解決springboot中scanBasePackages無法讀取子包的問題

    在使用springboot搭建項目時,可能會遇到scanBasePackages無法讀取子包的問題。本文將從幾個方面詳細闡述如何解決這個問題。 一、問題描述 在使用Springbo…

    編程 2025-04-25
  • SpringBoot請求參數綁定

    解答:SpringBoot請求參數綁定是指將HTTP請求中的參數與Controller方法的參數綁定起來,使得參數的傳遞變得簡單和方便。下面我們將從多個方面對SpringBoot請…

    編程 2025-04-25
  • SpringBoot文件上傳詳解

    一、前言 隨着互聯網的發展,文件上傳成為了必備的功能之一,而SpringBoot作為目前最流行的開發框架之一,為文件上傳提供了便捷而強大的解決方案。 二、使用multipart/f…

    編程 2025-04-24
  • 使用SpringBoot開發高效的Web服務應用

    一、快速入門 SpringBoot可以讓你更快速地搭建Web應用,它為開發者提供了許多使用時省去了很多配置代碼的便利。在這裡,我們將通過一個簡單的示例來介紹如何使用SpringBo…

    編程 2025-04-24
  • 使用SpringBoot連接MySQL數據庫

    SpringBoot是一個用於構建基於Spring框架的應用程序的快速開發工具,它提供了許多函數和庫,使開發人員能夠快速構建應用程序並將其部署到雲中。同時,MySQL是一個流行的關…

    編程 2025-04-24
  • Nacos SpringBoot版本詳解

    一、Nacos簡介 Nacos是一個開源的分布式配置管理和服務發現平台,為微服務架構提供了基礎設施支持。它可以幫助開發人員解決微服務架構中的服務發現、服務配置、服務元數據管理和流量…

    編程 2025-04-23

發表回復

登錄後才能評論