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

同じ設定で2つのラクダのコンテキストを存続させます。ロードバランサーパターンhttp://camel.apache.org/load-balancer.htmlを適用します。次に、定期的にキーストアファイルで更新を確認します。更新されている場合は、一度に1つずつ削除します。ロードバランサーが起動するコンテキストを認識していることを確認してください。

さて、私はそれを完全に考えていなかったことを認めなければなりません。SSLの部分は、少し注意が必要な場合があります。しかし、それは実行可能でなければなりません。

于 2012-05-05T10:03:14.583 に答える
0

一度だけ読み込まれるのではなく、カスタムとその戻り値を動的に変更するカスタムを使用してを構築するSSLContext(そして を介して渡す) ことができます。SslContextFactoryX509KeyManagerX509TrustManager

パフォーマンス上の理由から、メソッドの 1 つが呼び出されるたびにキーストアをリロードする代わりに、結果をキャッシュして、たまにだけ (おそらく 5 分ごとに、これは予想される使用状況に大きく依存します) リロードします。

于 2012-05-05T10:13:19.377 に答える