答え:ハンドシェイクしてまず相手を認証します

 TLSでは、暗号化通信を始める前に、クライアントとサーバー間で通信相手の認証や、暗号化通信に使う秘密情報の共有、使用する暗号アルゴリズムの決定などを実施する手順が決まっている。これらのやり取りは、ハンドシェイクと呼ばれる(図4-1)。

証明書でサーバーを認証

図4-1●TLSの暗号化通信を開始するまでの基本的な流れ
図4-1●TLSの暗号化通信を開始するまでの基本的な流れ
クライアント側では、あらかじめパソコンにインストールされている認証局の公開鍵を使ってサーバー証明書をチェックし、サーバーが偽物でないのを確認する。同時に、サーバー証明書に含まれる、サーバーの公開鍵を入手する。そしてクライアント側では、鍵のもととなる情報(乱数)を生成し、サーバーの公開鍵で暗号化して送信。サーバー側では、秘密鍵を使って復号し、鍵のもととなる情報を共有する。
[画像のクリックで拡大表示]

 クライアントがサーバーにアクセスすると(図4-1(1))、サーバーからサーバー証明書が送られてくる(同(2))。

 Q1でも説明したように、サーバー証明書は、認証局が発行するデジタルデータ。サーバー証明書には、そのサーバーの公開鍵と、認証局による署名が含まれる。

 ここでの署名とは、サーバー証明書に記載されたデータのハッシュ値を、認証局の秘密鍵で暗号化したもの。サーバー証明書は、「どの認証局が発行したのか」が重要になる。サーバー証明書は書式が決まっており、作成自体は誰でもできるからだ。そこで署名を使って確認する。

 署名は認証局の公開鍵でのみ復号できるので、受け取った側で記載データのハッシュ値と比較して証明書が本物か確認できる。

 OSベンダーなどが「信頼できる」と判断した主要な認証局の公開鍵(サーバー証明書)は、OSやWebブラウザーにあらかじめインストールされている。主要な認証局が発行したサーバー証明書であれば、インストール済みの公開鍵が署名の確認に使えるはずだ。

▼クライアントとサーバー
このケースでは、クライアントにはWebブラウザー、サーバーにはWebサーバーなどを想定している。
▼サーバー証明書
サーバー証明書の構造などは、後の回で詳述する。
▼書式が決まっており
X.509 v3という書式に従う。後の回で詳述する。