一、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
微信掃一掃
支付寶掃一掃