0

問題 - SSL 対応のサーバー ホスト (ベリサインの署名付き証明書がある) に接続したいです。このホストは、支払いトランザクションを承認/拒否します。

前提 - 1. ClientAuth は必要ありません。2. HTTPS を扱っていない

このホストに接続し、リクエストを送信してレスポンスを受信する Java クライアントを作成したいと思います。私の理解が正しくない場合は修正してください。

  1. Java クライアントはパッケージ 'javax.net.ssl.*' を使用する必要があります。このパッケージには、SSL Host と接続するための「SSLSocket」クラスがあります。
  2. Java クライアントの「キーストア」/クライアント証明書 (ベリサインによって署名されたもの) は必要ありません。clientAuth が有効 (TRUE) の場合にのみ必要です。
  3. 最初にサーバー証明書を確認してからデータを転送するために、クライアント コードに規定を設ける必要がありますか? このステップは必須ですか?
  4. いくつかの必須の手順をバイパスしていますか?

ありがとう、Raj Hebbar

4

2 に答える 2

1

安全なソケット (クライアント側) を作成するには、次を使用できます。

//An SSL socket can't be created from scratch. We need a Factory that
//handles the underlying logic that allows create a SSL socket
SocketFactory socketFactory = SSLSocketFactory.getDefault();

//Get the socket from the Factory
SSLSocket  socket = (SSLSocket) socketFactory.createSocket(host, port);

ここで、実行時に Java クライアント/ソケットを作成すると、ファクトリは有名な「SSL ハンドシェイク」を実行し、いくつかの検証が実行されます。デフォルトでは、Java クライアント/ソケットは次のことを行います。

  • サーバーの証明書が「ホスト」に対応しているかどうかを確認します。各証明書には「サーバー名」があり、この証明書はそのサーバーからのみダウンロードする必要があります。そのため、「www.oracle.com」サーバーから「www.google.com」証明書を取得すると、この検証は失敗します。
  • 証明書が信頼できるものかどうかを確認します。認証局によって署名されていない場合、または認証チェーンをチェックできない場合、または「信頼できる証明書リポジトリ」に含まれていない場合、この検証は失敗します。

重要: ホスト名チェックを説明する最初の箇条書きは間違っています。これは SSLSocket では発生せず、HTTPS クライアントでは発生します。これを指摘してくれた@EJPと@Gergely Szilagyiに感謝します

注:次のような検証の問題を解決する方法があります。

  • サーバー チェックをバイパス/オフにするには、この投稿をお読みください(お勧めしません!)
  • クライアントの信頼できるリポジトリに証明書を追加するには、この投稿を確認してください
于 2012-06-28T19:35:43.733 に答える
0
  1. 正しい。
  2. 正しい。
  3. いいえ、自動的に行われます。証明書をチェックするハンドシェイク リスナーを追加したり、SSLSession からピア証明書を取得したりできますが、それなしで続行することは可能です。
  4. はい。
于 2012-06-28T21:45:27.873 に答える