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