У меня есть служба, которая загружает хранилище ключей, но как мне сказать Apache Felix загрузить его во время выполнения? Jetty 9.4.20 имеет поддержку для перезагрузки sslContext с SslContextFactory.reload()
, но как мне получить ServerConnector от Феликса?
Я также попробовал подход, в котором я изменяю свойства комплекта с помощью ManagedServiceFactory
, однако не удается запуститьсервер. См. Пример
public void updateSslContext(ManagedServiceFactory mf) throws exception {
Dictionary<String, Object> newProps =new Hashtable<>();
newProps.put("org.apache.felix.https.keystore", "keystore.jks");
newProps.put("org.apache.felix.https.keystore.password", "password");
newProps.put("org.apache.felix.https.keystore.key.password", "1234");
newProps.put("org.apache.felix.https.enable", true);
mf.updated("org.apache.felix.http", newProps);
}
Сбой со следующей ошибкой
[INFO] Started Jetty 9.4.20.v20190813 at port(s) HTTP:8080 HTTPS:8443 on context path / [minThreads=8,maxThreads=200,acceptors=1,selectors=2]
[INFO] Apachde Felix Http Whiteboard Service started
...
...
...
ERROR 20191006 21:23:35 bid#4 - Failed to start Connector: ServerConnector@49d09625{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} (java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8080)
info 20191006 21:23:35 bid#4 - org.eclipse.jetty.server.Server :: jetty-9.4.20.v20190813; built: 2019-08-13T21:28:18.144Z; git: 84700530e645e812b336747464d6fbbf370c9a20; jvm 1.8.0_151-b12
info 20191006 21:23:35 bid#4 - org.eclipse.jetty.server.handler.ContextHandler :: Started o.e.j.s.ServletContextHandler@3ea91c64{/,null,AVAILABLE}
ERROR 20191006 21:23:35 bid#4 - Failed to start Connector: ServerConnector@27be6cdc{SSL,[ssl, http/1.1]}{0.0.0.0:8443} (java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:8443)
info 20191006 21:23:35 bid#4 - Stopped Jetty.
ERROR 20191006 21:23:35 bid#4 - Jetty stopped (no connectors available)
ERROR 20191006 21:23:35 bid#4 - Exception while initializing Jetty. (java.lang.NullPointerException)
Я бы предпочел использовать SslContextFactory.reload()
, чтобы сервер не перезагружался полностью.