KaQiita

新米社会人が適当なことを書いてます。温かく見守ってやってください。

TLS による通信の暗号化

はじめに

以下の「アドレスバーに URL を打ち込んでからページが表示されるまで」の記事のステップ3の記事です。

www.kaqiita.com

今までのステップのおさらい

TCP で通信するために、ステップ1で「DNS による名前解決」を行い、URL から IP アドレスへの変換を行いました。

そしてステップ2では実際に TCP で通信をするための準備として、「3Way-Handshake」という手法で TCP 通信コネクションを確立しました。

今ステップで行うこと

今までのステップで既に通信コネクションは確立できているので、ブラウザとサーバーは通信を行うことができます。

しかし、万が一通信を傍受されてしまった場合、仮にパスワードなどの個人情報を通信していたとしたら、そのパスワードは漏洩してしまいます。

通信が傍受されたとしても、通信内容を盗み見されないようにすることがこのステップで行うことです。

TLS

TLS という通信方法を取ることで、通信内容の盗み見を防ぎます。

TLS の通信の流れは以下の通りです。

f:id:KakkiiiiKyg:20190916072134p:plain

ブラウザはまずサーバーに対して「本当に自分がリクエストを送りたいサーバーなのか」を確かめるために、「SSL サーバー証明書」というものを見せるように要求します。

この SSL サーバー証明書には、「発行者のデジタル署名」「公開鍵」「有効期限」といった情報が記載されています。

ブラウザには予め「信頼できる認証局の証明書のリスト」がインストールされています。そこでその認証局の証明書のリストと受け取った「SSL サーバー証明書」のデジタル署名を照合します。

ブラウザは照合が完了したら、乱数を使って通信用の共通鍵を作成し、SSL サーバー証明書にあった公開鍵を使って共通鍵を暗号化して、サーバーに送信します。

サーバーは公開鍵に対応する秘密鍵を持っているので、暗号化された共通鍵を解読することができます。

これ以降の通信は共通鍵で内容を暗号化してお互いに送り合い、各々共通鍵で解読すれば、たとえ通信内容を盗み見されても第三者には内容は分からないようになります。

終わりに

ここまでがステップ3の流れです。

次のステップでとうとうサーバーに HTML ファイルをもらうためのリクエストを送ります。