java以编程方式更新tomcat 8中的证书,而无需重新启动服务器
为了更新用于服务器SSL的证书,我有一个代码来执行我需要的导入\导出和验证
它工作得很好,但是为了使更改生效,我必须重新启动tomcat
我希望避免重新启动,并在不使用外部工具(例如keytool)的情况下更新它
我查找了一些类似的问题,并找到了一个解决方案-重新启动443连接器。我可以这样做,连接器正在停止和启动,但证书未更新。只有服务器重新启动才能真正更新它
是否有我遗漏的连接器初始化程序
一些我应该清除的系统缓存或对象
这是我用于重新启动连接器的代码:
MBeanServer mbeanServer = null;
ObjectName objectName = null;
final ObjectName objectNameQuery = new ObjectName("*:type=Connector,port=443,*");
for (final MBeanServer server : (ArrayList<MBeanServer>) MBeanServerFactory.findMBeanServer(null)) {
if (server.queryNames(objectNameQuery, null).size() > 0) {
mbeanServer = server;
objectName = (ObjectName) server.queryNames(objectNameQuery,null).toArray()[0];
break;
}
}
mbeanServer.invoke(objectName, "stop", null, null);
Thread.sleep(1000);
mbeanServer.invoke(objectName, "start", null, null);
我在tomcat日志中看到了连接器重启的以下痕迹:
23-Apr-2017 15:42:00.292 INFO [BG-Task RestartTomcatConnector] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-443"]
23-Apr-2017 15:42:01.349 INFO [BG-Task RestartTomcatConnector] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-443"]
# 1 楼答案
问题已解决,以下是组件:
服务器。xml必须包含
bindOnInit="false"
。这是我使用的配置重新启动连接器的Java代码: