SSL通信のセッションの確立は下の図のように行われます。 |
|
詳細を以下に示します。
|
Hello Request |
Client Helloを要求するメッセージで、受け取ったクライアントは直ちにClient Helloメッセージを送信します。
|
Client Hello |
クライアントが利用可能な暗号化アルゴリズムと圧縮アルゴリズムのリストを送信します。
既存のセッションを再開する時は、セッションIDも送信します。
|
Server Hello |
クライアントが示した暗号化アルゴリズムリストと圧縮アルゴリズムリストの中からどれを利用して暗号化通信するかを指定します。
既存のセッションを再開する時はこのメッセージをクライアント側に送信することで、ネゴシエーションは完了します。
|
Server Certificate |
サーバーの証明書(ルートCA までの証明書のリストを含めて)を、送信します。
|
Server Key Exchange (省略可) |
一時的な RSA 鍵を生成し、サーバーの署名をつけて送信します。このメッセージは、サーバーが証明書を持たないか、 Certificateで送信したサーバーの証明書に、鍵交換可能な公開鍵が含まれない場合の代替として使用します。
|
Certificate Request (省略可) |
クライアント側の証明書の提示を要求する時に送信されるメッセージです。
サーバ側が信頼する認証局のリストも送信されます。
|
Server Hello Done |
サーバ側からクライアントへ向けたメッセージが送信されたことをクライアントへ通知します。
|
Client Certificate (省略可) |
クライアントはサーバから送られたメッセージ(Certificate Request、Server Hello Done)から、サーバの証明書を確認して、
自分がアクセスしようとしているサーバーか判断した後、クライアントはサーバからの要求に適した証明書をサーバに送信します。
もしサーバからの要求に適した証明書を持っていない時、no_certificate を返してサーバは、設定によりコネクションを切断します。
|
Client Key Exchange |
暗号化に使用するセッション鍵を生成するためのマスタシークレットの元のプリマスタシークレットを生成し暗号化してサーバに送信します。
プリマスタシークレットの暗号化にはサーバの証明書に含まれる公開鍵を使用します。
※プリマスターシークレット・・・暗号化通信を開始するときに使われるセションキーの元になるもの
|
Certificate Verify (省略可) |
クライアントは、今までに受信したHelloメッセージから署名を生成し、サーバに送信します。書名を受け取ったサーバは
、クライアントから受け取った証明書を使い署名の検証を行います。検証が成功すると、その証明書が間違いなく
クライアントの物であることが確認できます。
|
Change Cipher Spec |
ネゴシエーションされた暗号化アルゴリズムで通信することを宣言するメッセージです。
|
Finished |
クライアントはセッション確立のために必要なデータが揃ったことをサーバに知らせます。
|
Change Cipher Spec |
ネゴシエーションされた暗号化アルゴリズムで 通信することを宣言するメッセージです。
|
Finished |
クライアントへ新しいセッションIDを格納して送信します。
認証が行われた後、双方でプリマスタシークレットデータから最終的にセッション鍵が生成され、暗号化されたセッションが開始されます。 |