一、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-tw/n/150239.html