※今回はTLSは復号してWiresharkで確認してます
最初にTCPの3Way Handshakeを実施します
本来はTLSのバージョンなどをネゴシエーションしてTLS1.3と決めますが、決まったとしてで
ステップ1 共通鍵用のデータを送信・サーバ証明書を要求
クライアントはTLSハンドシェイクを実施スタートします
クライアントからサーバへ自分で使用できる暗号スイートなどと共通鍵用のパラメータや乱数を提示して、サーバ証明書を要求します

ステップ2 共通鍵の作成
サーバはクライアントから提示された暗号スイートなどから使用する物を選択して、サーバの共通鍵用のパラメータや乱数を送信する
サーバとクライアントで取得した共通鍵用のパラメータ値と乱数を使い、共通鍵を作成します。

ステップ3 サーバ証明書を送信
サーバ証明書とハッシュ値(署名)を送信する
(中間認証局がある場合は中間認証局の証明書も送付する)


3-1 サーバ証明書を検証
クライアントは受け取ったサーバ証明書を検証します。
主に「有効期限や失効状態・証明書チェーン・署名・ホスト名(ドメイン)」を確認します。

有効期限や失効状態の確認
失効状態はCRLから情報を得て確認します

ホスト名(ドメイン)とCNやSANが一致しているか確認

証明書チェーンと署名の検証を行います
階層構造になってますので、基本的に上から確認していきます
3-2 証明書チェーンの検証
秘密鍵で暗号化したデータは、ペアとなる公開鍵でしか復号できない。
公開鍵で暗号化したデータは、ペアとなる秘密鍵でしか復号できない。
証明書の署名は発行者の秘密鍵で暗号化されている
公開鍵は証明書に付属しています
1.ルート認証局の公開鍵でルート証明書の署名を検証
①クライアントはルート認証局の証明書から公開鍵を取り出します。
(ルート証明書はパソコンの証明書ストアに入ってます)
②取り出した公開鍵[ルート]を使ってルート証明書の署名を検証する。
③問題が無ければ、ルート証明書は正常と判断する

2.ルート証局の公開鍵で中間認証局の証明書の署名を検証
①クライアントはルート認証局の公開鍵で中間証明書の署名を検証する。
(中間認証局の証明書はサーバから取得します)
③問題が無ければ、中間証明書は正常と判断する

3.中間認証局の公開鍵でサーバ証明書の署名を検証
①クライアントは中間認証局の証明書から公開鍵を取り出します。
②取り出した公開鍵[中間]を使ってサーバ証明書の署名を検証する。
③問題が無ければ、サーバ証明書は正常と判断する

3-3 署名の検証
秘密鍵で暗号化されたデータを公開鍵で復号することによって、サーバーが証明書に対応する秘密鍵を本当に所有しているか(認証)出来る。
この検証がOKなら、「このサーバーは、提示した証明書(公開鍵)に対応する秘密鍵を持っている」と確認でき、サーバーが正当であることの証拠になる

次に
クライアントは、ハンドシェイクメッセージを連結し、サーバと同じアルゴリズムでハッシュ値を計算し、サーバーから送られてきたハッシュ値(署名)と、自身で計算したハッシュ値が一致するかを確認。
一致すれば、ハンドシェイクメッセージは改ざんされていないことが保証できる

ステップ4 TLSハンドシェイク完了
クライアントは検証結果が問題無かったことをサーバに連絡して、以降は各サービスの通信を暗号化して行う。
また、一定時間が経過したら新たに共通鍵を作成して新しい共通鍵で通信を行う。



コメント