8

weblogicサーバーでJavaアプリケーションを実行しています。アプリケーションには、SSLを使用して外部Webサービスに接続する2つの異なるモジュールがあります。たとえば、モジュールAとモジュールBです。

モジュールA-Axis上に構築-トラストストアAを使用MoudleB-Spring-ws上に構築-トラストストアBを使用

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

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

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

System.setPropertyimモジュールBコードベースを使用してトラストストアを設定しようとしました。ただし、モジュールBが最初に呼び出された場合にのみ機能します。たとえば、-JVMを新たに再起動した後、モジュールAを呼び出します-JVMに独自のトラストストアを設定し、次にモジュールBを呼び出します-失敗します-使用したにもかかわらず、JVMに独自のトラストストアを設定しませんSystem.setPropertyメソッド。

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

4

1 に答える 1

18

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

// 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()れるため、新しいコンテキストを作成し、初期化してから、この新しいコンテキストをデフォルトとして設定する必要があります。

肝心なのは、必要に応じて、トラスト ストアをいくつでも使用できるということです。

于 2011-09-29T06:40:55.450 に答える