ハンドシェイクと呼ばれるやりとりを行い、暗号化通信を行うにあたって必要な情報を交換し、暗号化通信を確立します。ハンドシェイクにて、クライアントとサーバー間で暗号化に使用する各プロトコルの選定や共通鍵の生成、また証明書を検証して信頼できる相手なのかの検証を行います。ハンドシェイクの複雑なので、今回は図付きで丁寧に説明します。通信の開始時にまずクライアントとサーバー間で通信の暗号化に使用する各アルゴリズムの選定や共通鍵の生成、また証明書による認証など、互いに暗号化通信に必要なパラメーターの取り決めが行われます。ハンドシェイクの流れは以下の通りです。囲まれているメッセージは省略されることがあります。ハンドシェイクにおける各フローの詳細を見ていきます。Helloクライアントはサーバーに対して暗号化通信の要求を送信します。このメッセージには、以下のような内容が含まれています。暗号化通信を行うためには、クライアントとサーバーの双方が利用できるアルゴリズムを使用する必要があります。バージョン、暗号スイートの一覧、圧縮方法の一覧)を含んでサーバーに提示します。ランダムとは、クライアントが生成した乱数です。ランダムは、プレマスターシークレットやマスターシークレットを生成するためのパラメーターとなります。通信のセッションを再開する際に利用されるフィールドです。切断したセッションを再開する機能があります。指定することで前回のセッションで接続を回復する機能です。通信に使用する暗号スイートを決定したり、通信の暗号化に使用する鍵の情報をクライアントに通知します。このメッセージには、以下の内容が含まれています。通信に利用するものを選択して、クライアントに通知します。ランダムとは、サーバが生成した乱数です。ランダムは、プレマスターシークレットやマスターシークレットを生成するためのパラメーターとなります。Certificate)サーバーはクライアントに対して、身分情報としてサーバー証明書を送信します。証明書も含んで送信します。(信頼チェーンの降順)信頼チェーンの末尾にルート証明書を含めることもできますが、ルート証明書はそもそもクライアントが信頼しているルート証明書である必要があります。仮に送信してもクライアント側では無視されますので、ルート証明書は基本的には送信しても意味がないため省略されるべきとされています。Exchange)共有鍵の鍵交換に必要なパラメーターに関する情報をクライアントに送ります。どのような情報をクライアントに送信するかは、選択された暗号スイートで指定されている鍵交換の方式によって異なります。Request)サーバーがクライアントを認証する必要がある場合に、クライアントに対して認証用の証明書を送るように要求します。このメッセージには以下の内容が含まれています。サーバーが理解できる証明書のタイプ一覧サーバーが信頼している証明機関の名前一覧クライアントから提示される証明書で認証するためには、サーバー自身がクライアント証明書を発行した証明機関を信頼している必要があります。そのため、証明書の送信要求において、サーバー自身が信頼している証明機関の一覧を提示し、クライアントは一覧にあるいずれかの証明機関から発行された証明書を認証用に提示できるようにします。認証が不要な場合には省略されます。始まる一連のめせーじが完了したことをクライアントに通知します。一覧のメッセージが完了したとみなします。受けた場合、クライアントの認証用の証明書を送信します。証明書も含んで送信します。送信されていない場合には、省略されます。Exchange共有鍵の鍵交換に必要なパラメーターに関する情報をクライアントに送ります。どのような情報をクライアントに送信するかは、選択された暗号スイートで指定されている鍵交換の方式によって異なります。情報をもって、それぞれで共有鍵を作成します。Verify)クライアントとサーバーが認証用に送信した証明書について、本当に自身がその証明書の持ち主であることを示す情報をサーバーに送信します。ハンドシェイクでやり取りにしたメッセージのデジタル署名を生成してサーバーに通知します。送信されていない場合は省略されます。Specクライアントが暗号化通信に必要な準備が完了したことを示すメッセージです。ハンドシェイクの通信で、サーバーとクライアントはプレマスターシークレットの情報を共有できたことになります。ランダム、プレマスターシークレットの情報からマスターシークレットを作成します。そのマスターシークレットから、暗号化通信に用いるための共通鍵(セッション鍵とも呼ばれます)などを生成します。ハンドシェイクのメッセージを終了することを宣言するメッセージを送信します。ハンドシェイクの全通信のデータのハッシュ値を算出し、その値とマスターシークレットを組み合わせて計算した結果を格納します。ハンドシェイクの一連のデータを保持していること、また、共通のマスターシークレットを保持していることを示すことができます。完全性も保証されております。通信を乗っ取ることはできません。パケットから見ることはできません。Specサーバーが暗号化通信に必要な準備が完了したことを示すメッセージを送信します。同様にこれ以降は暗号化の処理に切り替えるkとおを相手に宣言するためのメッセージとなります。クライアントと同様に、プレマスターシークレット、マスターシークレットを生成して暗号化通信に使用する共通鍵を生成します。メッセージが終了することを宣言するメッセージを送信します。値の算出方式は同じであり、クライアントから送信された値と同じ値が入ります。パケットから見ることはできません。通信において、通信相手とデータを暗号化して通信するためには、クライアントとサーバーで共通鍵を共有する必要があります。ハンドシェイクにて行われる鍵交換にて行われますが、鍵交換において実際に交換されるのは共通鍵そのものではありません。鍵交換においてはプレマスターシークレットを生成するためのデータとなります。共通鍵の生成に使用されるプレマスターシークレット、マスターシークレットは以下の通りです。プレマスターシークレットとはプレマスターシークレットとは、後からマスターシークレットを生成するための元データです。サーバー証明書の公開鍵で暗号化して送信します。メッセージにプレマスターシークレットの生成に必要なデータを交換し、そのデータをもとにプレマスターシークレットのデータを算出します。マスターシークレットとはマスターシークレットとは、暗号化通信を行うにあたって利用される以下の要素を生成するための元データとなります。サーバーとクライアントは、各自マスターシークレットの生成の処理を行いますが、共通のデータをもとに同じ計算を行うので、結果として同じデータ(マスターシークレット)が生成されます。ランダムのデータを組み合わせて、以下が生成されます。ハンドシェイクの過程で柵瀬いされる各情報のイメージ配下の通りです。は新しいマスターシークレットの算出方法です。機能をサポートしている場合、従来の算出方法とは異なる方式を利用します。平文の箇所のデータ全てのハッシュ値を算出し、そのハッシュ値とプレマスターシークレットの2つのパラメータから算出します。その攻撃に対する対策として考案されています。ハンドシェイクを行うのでは、通信における処理コストが無駄にかかってしまいます。通信を確立することができます。ハンドシェイク時に通信相手が正当なものであるかを確認する証明書の検証の処理や鍵交換の処理が省略されます。セッション再開を実現する手法としては、2つ存在します。含めてクライアントに通知します。セッションを再開させます。してクライアントに渡して、サーバー側ではセッション情報に関するキャッシュは保持しません。入れて接続要求を行います。セッションを再開させます。ハンドシェイクで行われるパケットのやり取りは一部省略されます。いう表現を使うこともあります。ハンドシェイクは以下の通りです。ハンドシェイクのパケットについては省略されます。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。WordPress.。