0

我们在camel-jetty中使用https时遇到问题。一旦密钥存储文件被更改(如删除或添加证书),我们如何才能使更改生效?似乎默认情况下,camel-jetty 不会动态重新加载更改。

示例代码:

JettyHttpComponent jettyComponent = getContext().getComponent("jetty", JettyHttpComponent.class);
SslSelectChannelConnector sslConnector = new SslSelectChannelConnector();
SslContextFactory sslFactory = sslConnector.getSslContextFactory();
sslFactory.setNeedClientAuth(true);
sslFactory.setKeyStore("d:" + File.separator +"serverkeystore");
sslFactory.setKeyManagerPassword("serverkey");
sslFactory.setKeyStorePassword("serverkeystore");
sslFactory.setTrustStore("d:" + File.separator +"servertruststore");
sslFactory.setTrustStorePassword("servertruststore");
Map<Integer, SslSelectChannelConnector> connectors = new HashMap<Integer, SslSelectChannelConnector>();
connectors.put(443, sslConnector);
jettyComponent.setSslSocketConnectors(connectors);   
from("jetty:https://0.0.0.0/httpsservice")
    .id("httpsserver")
    .process(new Processor(){
        public void process(Exchange exchange) throws Exception {
            exchange.getOut().setBody("OK");
            exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 200);
        }
    });

但是当我们动态更改密钥存储文件时,除非重新启动应用程序,否则更改不会生效。有什么方法可以使更改生效吗?

谢谢

4

2 回答 2

0

使用相同的配置保持两个骆驼上下文处于活动状态。应用负载均衡器模式http://camel.apache.org/load-balancer.html。然后定期检查密钥库文件是否有更新,如果有更新,一次删除一个。确保负载均衡器知道要触发的上下文。

好吧,我必须承认我还没有真正考虑清楚。SSL 部分可能使它有点棘手。但这应该是可行的。

于 2012-05-05T10:03:14.583 回答
0

您可以使用 custom和 custom构建一个SSLContext(并通过 an 传递它),该 custom将动态更改其返回值,而不是一劳永逸地加载。SslContextFactoryX509KeyManagerX509TrustManager

出于性能原因,我不会在每次调用其中一个方法时重新加载密钥库,而是缓存结果并仅偶尔重新加载一次(也许每 5 分钟一次,这实际上取决于您期望的使用情况)。

于 2012-05-05T10:13:19.377 回答