如何使tomcat在不重新启动的情况下选择新证书

u3r8eeie  于 2024-01-08  发布在  其他
关注(0)|答案(3)|浏览(190)

我们有一个Web应用程序,SSL证书每100天过期一次,并自动更新。我们必须重新启动服务器,每当它碰巧选择新更新的证书。有没有任何方法tomcat java进程可以自动拿起新的证书,每当证书得到更新。我们有成千上万的机器在我们的集群。

dly7yett

dly7yett1#

如果你已经嵌入了tomcat,那么你可以使用tomcat API来重新加载所有证书。检查:How do I force tomcat to reload trusted certificates?最简单的方法是以编程方式读取密钥库,从中获取SSL上下文并使用它进行连接。

  1. private SSLContext buildSslSocketContext() {
  2. logger.info("Started checking for certificates and if it finds the certificates will be loaded…..");
  3. String keyStoreLoc = //KEYSTORE LOCATION;
  4. String password = //KEYSTORE_PASSWORD;
  5. SSLContext context = null;
  6. try {
  7. // Create a KeyStore containing our trusted CAs
  8. KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
  9. InputStream in = null;
  10. try {
  11. in = new FileInputStream(keyStoreLoc);
  12. keystore.load(in,password.toCharArray());
  13. }catch(Exception e) {
  14. logger.error("Unable to load keystore "+e.getMessage());
  15. }finally {
  16. if(in != null) {
  17. in.close();
  18. }
  19. }
  20. // Create a TrustManager that trusts the CAs in our KeyStore
  21. String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
  22. TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
  23. tmf.init(keystore);
  24. // Create an SSLContext that uses our TrustManager
  25. context = SSLContext.getInstance("TLS");
  26. context.init(null, tmf.getTrustManagers(), null);
  27. logger.info("Completed loading of certificates.");
  28. } catch (Exception e) {
  29. logger.error("unable to create ssl context "+e.getMessage());
  30. }
  31. return context;
  32. }
  33. ClientBuilder clientBuilder = null;
  34. try {
  35. SSLContext sslContext = buildSslSocketContext();
  36. clientBuilder = ClientBuilder.newBuilder();
  37. if (sslContext != null) {
  38. clientBuilder.sslContext(sslContext);
  39. } else {
  40. logger.info("SSL conext is missing");
  41. }
  42. client = clientBuilder.build(); //use this client to make http connection
  43. }catch(Exception e) {
  44. logger.error("unable to get ssl conext for client :"+e.getMessage());
  45. }

字符串

展开查看全部
fkaflof6

fkaflof62#

是的,有一种方法可以在代码的帮助下自动加载证书。您所要做的就是从主机下载证书,并将该证书导入到Tomcat Server的Connector(可以在server.xml中找到)所指向的密钥库中。这可以在称为keytool的工具的帮助下完成。
第一个月
一旦证书被添加到密钥库中,您就可以初始化SSLContext并将其传递给服务器进行其他后续调用。

  1. SSLContext sslContext = SSLContexts.custom()
  2. .loadTrustMaterial(new TrustStrategy() {
  3. @Override
  4. public boolean isTrusted(X509Certificate[] chain, String authType) throws
  5. CertificateException {
  6. return true;
  7. }
  8. })
  9. .loadKeyMaterial(<Keystore-loaded with certificate>,<password of the keystore>)
  10. .build();
  11. Config config = Config.newConfig();
  12. config.withSSLContext(sslContext);`

字符串
config对象可作为参数传递给函数**.withConfig(config)**以创建客户端调用。

展开查看全部
vlurs2pr

vlurs2pr3#

尝试使用Manager App
1.安装Tomcat Manager应用程序(如果尚未安装)。
1.创建Tomcat用户,例如“sslAdmin”,密码为“sslAdminPassword”-在文件conf/tomcat-users.xml<tomcat-users>部分添加以下两行(如果还不存在):

  1. <role rolename="manager-script"/>
  2. <user username="sslAdmin" password="sslAdminPassword" roles="manager-script" />

字符串
1.启动或重新启动Tomcat
1.从现在开始,您可以通过以下命令重新加载SSL配置,而无需从命令行重新启动整个服务(请参阅 * 重新加载TLS配置 *):

  1. curl -u sslAdmin:sslAdminPassword http://localhost:8080/manager/text/sslReload


注意,对于上面的示例,Tomcat必须使用端口8080。

相关问题