SSLは、提示する証明書についてクライアントにヒントを提供できます。このの場合、複数のIDを持つキーストアを1つ使用できますが、残念ながら、ほとんどのサーバーではこのヒント機能は使用されません。したがって、各接続で使用するクライアント証明書を指定すると、より堅牢になります。
特定のIDストアとトラストストアを使用してSSLContext
を設定するサンプルコードです。これらの手順を繰り返して、使用するクライアント証明書ごとに1つずつ、複数のコンテキストを作成できます。各SSLContext
は、おそらく同じトラストストアを使用しますが、異なるアイデンティティストア(そのコンテキストで使用される単一のクライアントキーエントリを含む)を使用します。
一度必要なコンテキストを初期化し、接続ごとに正しいコンテキストを再利用します。複数の接続を行っている場合は、SSLセッションを利用できます。
KeyManagerFactory kmf =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(identityStore, password);
TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
後で、直接ソケットを作成することができます
SSLSocketFactory factory = ctx.getSocketFactory();
Socket socket = factory.createSocket(host, port);
それとも、あなたがURL
クラスを使用している場合、あなたはHTTPSリクエストを作成するときに使用するSSLSocketFactory
を指定することができた:
Java 6には、暗号スイートなどの設定に応じてソケットを簡単に設定できるようにするためのAPIがいくつか追加されています。
「Java 6には、暗号スイートの環境設定に応じてソケットを簡単に設定できるAPIが追加されています」 これらの設定についてさらに詳しく教えてください。 – Tazzy531
@ Tazzy531 - Java 6に['SSLParameters'、](http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/javax/net/ssl/class-use/SSLParameters)が追加されました。 html)です。これは、単一操作で 'SSLEngine'または新しい' SSLSocket'で設定できます。 – erickson