Wie aktualisiere ich Vertrauensstore dynamisch?
Posted: 31 Aug 2025, 14:11
Ich habe derzeit gegenseitige TLs in meiner Spring -Boot -Anwendung implementiert und mache es programmgesteuert, wie SO: < /p>
Dies funktioniert gut und erwartungsgemäß, aber ich habe eine Anforderung, wo ich den Trust-Store während der Laufzeit aktualisieren muss (zum Beispiel, wenn ein @getmapping Endpunkt aufgerufen wird). Meine Anwendung. < /p>
Wie kann ich das tun?
Ich habe auch versucht, die obigen GetsSlContext () als @Bean aufzurufen, die auch nicht funktionierte. />[*]https://jcalcote.wordpress.com/2010/06/ ... ust-store/
Ich habe eine Lösung gefunden, die genau wie möglich beschreibt, wie man einen dynamischen Vertrauensgeschäft hat. Wenn zum Beispiel ein GET -Endpunkt aufgerufen wird.>
Code: Select all
@Bean
public ServletWebServerFactory servContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
TomcatConnectorCustomizer tomcatConnectorCustomizer = new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setPort(8443);
connector.setScheme("https");
connector.setSecure(true);
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
protocol.setSSLEnabled(true);
protocol.setKeystoreType("PKCS12");
protocol.setKeystoreFile(keystorePath);
protocol.setKeystorePass(keystorePass);
//client must be authenticated (the cert he sends should be in our trust store)
protocol.setSSLVerifyClient(Boolean.toString(true));
protocol.setTruststoreFile(truststorePath);
protocol.setTruststorePass(truststorePass);
protocol.setKeyAlias("APP");
}
};
tomcat.addConnectorCustomizers(tomcatConnectorCustomizer);
return tomcat;
}
Wie kann ich das tun?
Code: Select all
@GetMapping("/register")
public String Register() throws Exception {
ConfigurableApplicationContext configContext = (ConfigurableApplicationContext) appContext;
ConfigurableListableBeanFactory beanRegistry = configContext.getBeanFactory();
SSLContext sslContext = getSSLContext();
beanRegistry.registerSingleton("sslContext", sslContext);
return "okay";
}
public SSLContext getSSLContext() throws Exception {
TrustManager[] trustManagers = new TrustManager[] {
new ReloadableX509TrustManager(truststoreNewPath)
};
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManagers, null);
SSLContext.setDefault(sslContext);
return sslContext;
}
Ich habe eine Lösung gefunden, die genau wie möglich beschreibt, wie man einen dynamischen Vertrauensgeschäft hat. Wenn zum Beispiel ein GET -Endpunkt aufgerufen wird.>