2016-09-09 6 views
1

SSLContextを作成し、serverSocketFactoryからserverSocketを作成して接続を受け入れ始めたとします。以下のようなssl接続でserversocketを開いた後にtrustmanagerを再ロードすることはできますか?

何か: SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234).accept();

は、それがいつかのために実行されていて、今私は私のTrustManagerを(追加/信頼する新しい証明書を削除)を変更することを決定したとします。ソケットを閉じずに新しいSSLContextを作成することなくこれを行うことは可能ですか?

答えて

0

次の方法を使用できます。

最初に、作成中のSSLContextオブジェクトへの参照を保持します。新しいTrustManagerをロードしたい場合、次のように

SSLContext sslContext=SSLContext.getDefault(); 
sslContext.getServerSocketFactory().createServerSocket(1234).accept(); 

次に、あなたが対応するのTrustManagerで再びinit()メソッドを呼び出すことができます。ここ

TrustManager trustManagers[] = // load trust managers here. 
sslContext.init(null,trustManagers,null); 

init()方法は3つのパラメータ、KeyManager[]TrustManager[]SecureRandomをとります。いずれかにnullを渡すと、SSLContextにはデフォルトのキーマネージャとトラストマネージャがロードされます。トラストマネージャのみをロードしたいので、新しいTrustManager[]をそれに渡す必要があります。

SSLContextオブジェクトへの参照を変更していないため、これはフローを破らず、既存のSSLIOSessionにも影響しません。

関連する問題