1

SSLContext を作成し、serverSocketFactory から serverSocket を作成し、接続の受け入れを開始したとします。

何かのようなもの: SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234).accept();

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

4

1 に答える 1

1

次のアプローチを使用できます。

まず、SSLContextオブジェクトを作成するときにオブジェクトへの参照を保持します。

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

次に、新しい をロードする場合は、次のように、対応するTrustManagerを使用してメソッドを再度TrustManager呼び出すことができます。init()

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

ここで、init()メソッドは と の 3 つのパラメータをKeyManager[]取りTrustManager[]ますSecureRandomnullそれらのいずれかを渡すSSLContextと、デフォルトのキー マネージャーとトラスト マネージャーがロードされます。Trust Manager のみをロードしたいので、newTrustManager[]をそれに渡す必要があります。

オブジェクトへの参照を変更してSSLContextいないため、フローが中断されたり、既存SSLIOSessionの s に影響したりすることはありません。

于 2016-09-14T11:11:31.733 に答える