はじめに
以前、SSL/TLSについてざっくり理解してみるという記事を書いたときに、
- 認証局とどのようなやり取りをして、サーバー証明書が出来上がるのか
- クライアント側でどのように認証しているのか
具体的に書くことができなかったので、本記事ではその部分に焦点を当てたいと思います。
SSL/TLSについてざっくり理解してみるで掲載した以下の図をより詳しく見ていくというイメージです。
より詳しいプロセス
以下に上記の図をより詳細化した、サーバー証明書の取得からクライアント認証までのプロセスの図を示します
- サーバーで秘密鍵と公開鍵を生成する
- 生成した公開鍵やドメイン名などの情報を含めたCSR(Certificate Signing Request:証明書署名要求)を作成し、認証局に送る
- 認証局が審査を行う(種類としては以下の3つがあります)
- ドメイン認証型(DV)
ドメインの所有者を検証するだけ - 企業認証型(OV)
ドメインの所有者と企業の法的実在性を検証する - Extended Validation(EV)
ドメインの所有者と企業の法的実在性に加え、物理的実在性、組織の運営状況など他にも多くの項目で検証していきます
- ドメイン認証型(DV)
- 認証局がサーバー証明書を発行する。(認証局は発行時に以下のことを行います)
- 証明書の内容全体に対してハッシュ関数を適用し、ハッシュ値を生成します
- 認証局は生成されたハッシュ値を認証局の秘密鍵で暗号化します。この2番の部分をデジタル署名と言います。
- サーバー証明書を受け取ったサーバーはサーバー証明書をサーバーにインストール
- クライアントからサーバーにSSL通信のリクエストを送信する
- サーバーはサーバー証明書をクライアントPCに送付する
- 4.2の所で、認証局の秘密鍵で暗号化されたデジタル署名部分の復号を認証局の公開鍵(※)で行う。同じハッシュ結果なら、正当なサーバー証明書と判断することができます。
※ 認証局の公開鍵がなぜあるのかというと、代表的な認証局のデジタル証明書の場合、クライアントPCのブラウザに認証局の公開鍵を含んだサーバー証明書がインストールされているためです。
クライアント側の認証方法
より詳しいプロセスの 8
で書いているように、ハッシュの結果を比較して、改ざんが無いか検証しています。
具体的にどのように、認証しているかを見てみたいと思います。
上記のように、「クライアント側で署名前証明書を署名アルゴリズムで計算したハッシュ値」と「デジタル署名を認証局の公開鍵で復号したときに得られるハッシュ値」を比較し検証することで、認証を行っています。
まとめ
サーバー証明書の取得からクライアント認証までのプロセスをまとめていく中で、デジタル署名の意味や認証局の審査の種類など副次的に知らない知識も多く出てきて、まだまだ知らない知識や概念があることを感じました。
SSL/TLSハンドシェイクなどSSL/TLS周りでまだまだ分からない点があるため、次回以降まとめていきたいと思います。
本記事の内容に誤りがある場合はご指摘いただけると大変助かります。
参考文献