2011-09-29 9 views
7

weblogicサーバーでJavaアプリケーションを実行しています。アプリケーションには、SSLを使用して外部Webサービスに接続する2つの異なるモジュールがあります。モジュールAとモジュールBを例としましょう。同じJVMで複数のトラストストアを設定する

モジュールA - 軸上に構築 - トラストストアを使用A Moudle B - Spring-wsで構築 - B.

モジュールAが存在します。モジュールBが導入されています。

どのモジュールが呼び出されているかに基づいてJVMでトラストストアを動的に設定できる必要があります。

いくつかの制約のために、私はカスタムキーマネージャを作成するために、 オプションを持っていません。 - 1つのトラストストアを使用

System.setProperty imモジュールBコードベースを使用してトラストストアを設定しようとしました。ただし、モジュールBが最初に呼び出された場合にのみ機能します。例えば、 -私はJVMを新しく再起動しました 次にモジュールAを呼び出します - それはJVM内の自分のトラストストアです 次にモジュールBを呼び出します - 失敗します - それはJVMでも自分自身のトラストストアを設定していません私はSystem.setPropertyメソッドを使用しています。

何かが見つからないか、System.setPropertyが既存の設定値を上書きしないということだけです。もしそうなら、私のオプションはここにあります。

+0

なぜ2つのトラストストアが必要ですか?トラストストアは、ピアを認証するために信頼できるCAだけを示します。モジュールごとに異なるのはなぜですか? – EJP

+0

これをチェックしてください、それはあなたを助けるかもしれません:http://stackoverflow.com/questions/1793979/registering-multiple-keystores-in-jvm/ – Raz

答えて

14

信頼できるキーストアは、実行時に動的にロードできます。

// load your key store as a stream and initialize a KeyStore 
InputStream trustStream = ...  
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());  

// if your store is password protected then declare it (it can be null however) 
char[] trustPassword = ... 

// load the stream to your store 
trustStore.load(trustStream, trustPassword); 

// initialize a trust manager factory with the trusted store 
TrustManagerFactory trustFactory = 
    TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());  
trustFactory.init(trustStore); 

// get the trust managers from the factory 
TrustManager[] trustManagers = trustFactory.getTrustManagers(); 

// initialize an ssl context to use these managers and set as default 
SSLContext sslContext = SSLContext.getInstance("SSL"); 
sslContext.init(null, trustManagers, null); 
SSLContext.setDefault(sslContext); 

SSLContext.getDefault()は、あなたが新しいものを作成する必要がありますので、あなたが を変更することはできません デフォルトコンテキストをあなたにお返しになるので、気をつけて、それは、デフォルトとしてこの 新しいコンテキストを設定して初期化します。

最後の行は、です。希望する場合は、任意の数のトラストストアを使用できます。