SpringBoot https双向认证实现证书热加载
外置Tomcat实现请转移到此处(本文也是受此文章启发)
https://blog.csdn.net/u012613903/article/details/53608331
SpringBoot方式
前言
公司做的是金融服务,需要为第三方提供Http接口服务,但由于接口调用过程中包含用户私密信息,公司要求做RSA双向认证,最好的办法就是使用https。由于对接多个第三方,需要为每个第三方生成一套证书。当新的第三方加入时需要将新的证书生成并加载到接口服务器中,期间不能重启接口网关或者服务器,避免影响其他用户访问。
公司项目使用SpringBoot开发,也可部署到外部Tomcat中。外部Tomcat实现热加载需要实现X509TrustManager,并打包为jar包,放在Tomcat的lib目录中,相对麻烦。SpringBoot就没有实现方式吗?server.ssl配置中没有trustManagerClassName的配置项,我该如何让SpringBoot内置的Tomcat使用我的X509TrustManager?
找了很多文章,貌似没有人在此处花过心血,于是有了此文。
代码
本文是项目代码的一部分,未列出全部代码
以下代码在SpringBoot版本2.1.6.RELEASE下测试成功
application.yml
spring.main.allow-bean-definition-overriding=true
TomcatConfiguration.java
/**
* 配置Tomcat,使得TrustManagerClassName可被设置
*
* @author mzhong
* @version 1.0
* @date 2019/10/11 11:05
*/
@Configuration
@ConditionalOnClass({
Servlet.class, Tomcat.class, UpgradeProtocol.class})
@ConditionalOnMissingBean(value = ServletWebServerFactory.class, search = SearchStrategy.CURRENT)
public class TomcatConfiguration {
private static final Logger Log = LoggerFactory.getLogger(TomcatConfiguration.class);
@PostConstruct
public void init(