0

TCP ソケットを開き、X.509 デジタル証明書を使用して SSLv3 または TLSv1 IP プロトコルを使用して認証する必要があります。

この握手プロセスには正確に何が含まれますか? 各メッセージを暗号化し、秘密鍵で署名する必要があることはわかっています。ほかに何か?

成功したら、ソケット経由で POST HTTP リクエストを送信する必要があります。

しばらくしてから非アクティブな場合、サーバーはこのソケットを閉じることを決定する場合があります。リクエストを再度開き、認証し、送信できるようにする必要があります。

私に与えられた証明書は、次の情報を含む PKCS12 形式です。

証明書の識別、証明書の公開鍵、証明書の秘密鍵、認証局チェーン

私はSSLにかなり慣れていないので、誰かがJavaまたはSpring統合でこれを実装する方法へのポインタを提供できますか.

4

3 に答える 3

1

まず、javax.net.ssl.HttpsURLConnection javadocs(http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/javax/net/ssl/HttpsURLConnection)を確認することをお勧めします。 html

また、keytoolコマンドを使用して、証明書をキーストアにインポートする必要があります。

于 2010-07-16T03:03:52.083 に答える
0

握手について知る必要はありません。それはすべてあなたのために行われます。提案されているように JSSE リファレンスを読んで、何を心配しなければならないかを確認してください。

于 2010-07-16T10:35:32.297 に答える
0

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

実際には、PKCS#12 ファイル (たとえば) に含まれる証明書とその秘密鍵が必要であり、サーバーに接続するときにそれを送信するようにクライアントを構成する必要があります (サーバーは構成に従ってそれを要求します)。必要な証明書は 1 つだけで、多数の証明書から選択する必要はないと考える方が簡単です。それ以外の場合はX509TrustManagerSSLContext.

すべての接続がこの証明書を使用する可能性が高い場合は、デフォルト設定HttpsURLConnection(およびデフォルトSSLSocketFactory) を使用できます。これは次の方法で実行できます。

  • javax.net.ssl.keyStorejavax.net.ssl.keyStoreTypeおよびjavax.net.ssl.keyStorePasswordシステム プロパティをコマンド ラインで設定します。マシン上の他の誰かが(マシンの構成に応じて)プロセスをリストすることにより、コマンドラインと設定を見る可能性があるため、これはお勧めしません。
  • アプリケーション内でこれらのシステム プロパティを設定し、
  • を初期化し、(Java 6)SSLContextを介してデフォルトとして設定します。SSLContext.setDefault(..)

.p12 (PKCS#12) ファイルはすぐにサポートされるキーストアであるため、 を使用して変換する必要はなく、ストア タイプとしてkeytool使用するだけであることに注意してください。PKCS12

これらの設定が必要な場合、または を初期化しSSLContext、そこから を作成し、 (使用している場合)SSLSocketFactoryのインスタンスを で構成するHttpsURLConnectionことができますsetSSLSocketFactory

( jSSLutilsなどのツールを使用して、.xml ファイルをビルドできる場合がありますSSLContext。)

于 2010-07-16T17:48:47.527 に答える