TLS/SSL の詳細については、クライアント証明書認証の場合、「通常の」ハンシェイクと比較して、サーバーは追加のCertificateRequestTLS メッセージをクライアントに送信し、クライアントは後続のCertificateTLS メッセージで証明書を使用して応答します (後で、クライアントはCertificateVerifyTLSを送信します)。送信した証明書の公開鍵の秘密鍵を実際に持っていることをサーバーに証明するために、秘密鍵で他のメッセージに署名するメッセージ.) ハンドシェイクが終了すると、メッセージは秘密鍵で暗号化されるのではなく、サーバーと共有される一時的な鍵で暗号化されます (秘密裏にこれらの鍵に同意することもハンドシェイクの一部です)。
実際には、PKCS#12 ファイル (たとえば) に含まれる証明書とその秘密鍵が必要であり、サーバーに接続するときにそれを送信するようにクライアントを構成する必要があります (サーバーは構成に従ってそれを要求します)。必要な証明書は 1 つだけで、多数の証明書から選択する必要はないと考える方が簡単です。それ以外の場合はX509TrustManager、SSLContext.
すべての接続がこの証明書を使用する可能性が高い場合は、デフォルト設定HttpsURLConnection(およびデフォルトSSLSocketFactory) を使用できます。これは次の方法で実行できます。
javax.net.ssl.keyStore、javax.net.ssl.keyStoreTypeおよびjavax.net.ssl.keyStorePasswordシステム プロパティをコマンド ラインで設定します。マシン上の他の誰かが(マシンの構成に応じて)プロセスをリストすることにより、コマンドラインと設定を見る可能性があるため、これはお勧めしません。
- アプリケーション内でこれらのシステム プロパティを設定し、
- を初期化し、(Java 6)
SSLContextを介してデフォルトとして設定します。SSLContext.setDefault(..)
.p12 (PKCS#12) ファイルはすぐにサポートされるキーストアであるため、 を使用して変換する必要はなく、ストア タイプとしてkeytool使用するだけであることに注意してください。PKCS12
これらの設定が必要な場合、または を初期化しSSLContext、そこから を作成し、 (使用している場合)SSLSocketFactoryのインスタンスを で構成するHttpsURLConnectionことができますsetSSLSocketFactory。
( jSSLutilsなどのツールを使用して、.xml ファイルをビルドできる場合がありますSSLContext。)