TLS/SSL の詳細については、クライアント証明書認証の場合、「通常の」ハンシェイクと比較して、サーバーは追加のCertificateRequest
TLS メッセージをクライアントに送信し、クライアントは後続のCertificate
TLS メッセージで証明書を使用して応答します (後で、クライアントはCertificateVerify
TLSを送信します)。送信した証明書の公開鍵の秘密鍵を実際に持っていることをサーバーに証明するために、秘密鍵で他のメッセージに署名するメッセージ.) ハンドシェイクが終了すると、メッセージは秘密鍵で暗号化されるのではなく、サーバーと共有される一時的な鍵で暗号化されます (秘密裏にこれらの鍵に同意することもハンドシェイクの一部です)。
実際には、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
。)