SSL または TLS ハンドシェークの概要

SSL または TLS ハンドシェークにより、SSL または TLS クライアントと SSL または TLS サーバーは 通信に使用する秘密鍵を設定できます。

このセクションでは、SSL または TLS クライアントとサーバーが相互に通信できるようにするステップの要約を示します。

  • 使用するプロトコルのバージョンについて合意する。
  • 暗号アルゴリズムを選択する。
  • デジタル証明書を交換し、検証して、互いを認証する。
  • 非対称暗号化手法を使用して、共有秘密鍵を生成する。これにより、鍵配布の問題が避けられます。 その後、SSL または TLS は、この共有鍵を使用してメッセージの対称暗号化の処理を実行します。対称暗号化は、非対称暗号化より高速です。

暗号アルゴリズムとデジタル証明書の詳細については、関連情報を参照してください。

SSL ハンドシェークに必要な手順の概要は、次のとおりです。
  1. SSL または TLS クライアントは、 client hello メッセージを送信します。このメッセージには、SSL または TLS バージョンなどの暗号情報と、クライアントによってサポートされる CipherSuites が優先順にリストされます。 また、このメッセージには、以降の計算で使用されるランダム・バイト・ストリングも入っています。 このプロトコルにより、クライアント・ハロー には、クライアントがサポートするデータ圧縮メソッドを組み込むことができます。
  2. SSL または TLS サーバーは、 server hello メッセージで応答します。このメッセージには、クライアントによって提供されたリストからサーバーが選択した CipherSuite 、セッション ID、および別のランダム・バイト・ストリングが含まれています。 また、サーバーは、そのデジタル証明書も送信します。 サーバーがクライアント認証用のデジタル証明書を必要とする場合、サーバーは、サポートされる証明書のタイプのリストと、受け入れ可能な認証局 (CAs)の識別名を含むクライアント証明書要求を送信します。
  3. SSL または TLS クライアントはサーバーのデジタル証明書を検証します。 詳しくは、 SSL および TLS による識別、認証、機密性、および保全性の提供方法を参照してください。
  4. SSL または TLS クライアントは、クライアントとサーバーの両方が以降のメッセージ・データの暗号化に使用する秘密鍵を計算できるようにする、ランダム・バイト・ストリングを送信する。 このランダム・バイト・ストリング自体は、サーバーの公開鍵を使用して暗号化されます。
  5. SSL または TLS サーバーが クライアント証明書要求を送信した場合、クライアントは、クライアントの秘密鍵で暗号化されたランダム・バイト・ストリングを、クライアントのデジタル証明書とともに送信するか、または デジタル証明書なしアラートを送信します。 このアラートは警告にすぎませんが、一部のインプリメンテーションでは、クライアント認証が必須である場合、ハンドシェークは失敗します。
  6. SSL または TLS サーバーはクライアントの証明書を検査します。 詳しくは、 SSL および TLS による識別、認証、機密性、および保全性の提供方法を参照してください。
  7. SSL または TLS クライアントは、サーバーに 終了 メッセージを送信します。このメッセージは秘密鍵で暗号化され、ハンドシェークのクライアント部分が完了したことを示します。
  8. SSL または TLS サーバーは、クライアントに 終了 メッセージを送信します。このメッセージは秘密鍵で暗号化され、ハンドシェークのサーバー部分が完了したことを示します。
  9. SSL または TLS セッションの間、サーバーとクライアントは、共有秘密鍵を使用して対称的に暗号化されるメッセージを交換できるようになる。
図 1 は、SSL または TLS ハンドシェークを示しています。
図1: SSL または TLS ハンドシェークの概要
この図は、図の前の本文で説明されているように、SSL または TLS ハンドシェークを示しています。