暗号化について触れながら、サーバ認証の流れを解説します。
SSL/TLS暗号化通信の種類
暗号化通信の種類は3種類存在します。それぞれについて通信の流れを記載します。
Ⅰ.共通鍵暗号方式(主な暗号スイート:RC4、DES、3DES、AES)
❶クライアントは、共通鍵を作成する
❷クライアントは、共通鍵をサーバへ送信する
❸サーバは、その共通鍵でデータを暗号化して、クライアントへ送信する
❹クライアントは、共通鍵でデータを復号して、データを取得する
欠点:共通鍵交換時に、第3者に通信傍受される危険性あり
Ⅱ.公開鍵暗号方式(主な暗号スイート:RSA、DSA、ECDSA)
❶サーバは、公開鍵と秘密鍵を作成し、公開鍵を公開する
❷クライアントは、サーバの公開鍵でデータを暗号化して、サーバへデータを送信する
❸サーバは、サーバの秘密鍵でデータを復号して、データを取得する
欠点:鍵のビット長、平文が長いから、暗号、復号に時間がかかる
Ⅲ.共通鍵と公開鍵のハイブリット方式
現在主流であり、初回の共通鍵交換を安全に行うのが目的となります。
❶サーバは、公開鍵と秘密鍵を作成し、公開鍵を公開する
❷クライアントは、共通鍵を作成する
❸クライアントは、サーバの公開鍵で共通鍵を暗号化する
❹クライアントは、暗号化した共通鍵をサーバに送信する
❺サーバは、サーバの秘密鍵で共通鍵を復号して、共通鍵を取得する
❻サーバは、共通鍵でデータを暗号化して、クライアントに送信する
❼クライアントは、共通鍵でデータを復号して、データを取得する
サーバ認証の流れ
クライアントからサーバへのSSL/TLS暗号化通信において、上記の「Ⅲ.共通鍵と公開鍵のハイブリット方式」を使用した通信の流れを記載します。
Ⅰ.サーバ証明書の作成
❶サーバは、秘密鍵と公開鍵を作成する
❷サーバは、サーバ情報と秘密鍵を元にCSRを作成して、認証局(CA)へ申請する
❸CAは、ハッシュ関数を用いてCSRをハッシュ化する
❹CAは、CAの秘密鍵でハッシュ化したCSRを暗号化(デジタル署名)して、サーバ証明書を作成する。それをサーバに送信する
❺サーバは、サーバ証明書をローカルに配置する
通常はCA(認証局)が持つ秘密鍵で署名しますが、Serverの秘密鍵自身でCSRに署名することもできます。信頼性の低い自己署名証明書(オレオレ証明書)となります。
Ⅱ.サーバ証明書の真正性(改ざんの有無)チェック
❶クライアントからサーバに接続要求
❷サーバは、サーバ証明書をクライアントに送信する
❸クライアントは、証明書上の認証局に問い合わせる
❹CAは、クライアントにCAの公開鍵を送信する
❺クライアントは、CAの公開鍵でデジタル署名を復号して、CSRのハッシュ値を取り出す
❻クライアントは、CSR文書をハッシュ化して、❺のハッシュ値と比較する
❼❺と❻のハッシュ値が一致すれば、証明書の真正性が担保される
Ⅲ.共通鍵交換
❶クライアントは共通鍵を作成する
❷クライアントは、サーバの公開鍵で自分の共通鍵を暗号化する
❸クライアントは、暗号化した共通鍵をサーバに送信する
❹サーバは、サーバの秘密鍵で復号して、共通鍵を取得する
Ⅳ.共通鍵暗号によるデータのやり取り
❶クライアントは、データを共通鍵で暗号化する
❷クライアントは、暗号化したデータをサーバに送信する
❸サーバは、共通鍵でデータを復号して、データを取得する
サーバ認証の要素まとめ
参考:
https://qiita.com/izuki_y/items/15f755d150d251c0533b
[…] 参考:【SSL/TLS】サーバ認証の仕組み […]