最終更新:

【仕組み解説】HTTPSはどうやって通信を暗号化しているのか — TLS/SSLの裏側を図解


TLSハンドシェイクの流れ クライアント サーバー ① ClientHello(暗号方式一覧) ② ServerHello + 証明書 + 公開鍵 ③ 証明書検証 → 共通鍵を公開鍵で暗号化 ④ 共通鍵が共有完了 → 暗号化通信スタート 🔑 公開鍵暗号で安全に鍵交換 🔒 共通鍵暗号で高速に通信 TLS 1.3 ではこの流れが1往復に短縮され、より高速・安全に
TLSハンドシェイクのイメージ
ひよこ ひよこ

ブラウザアドレスバーに鍵マークが出るけど、あれって何を意味してるの?

ペンギン先生 ペンギン先生

あの鍵マークは「この通信はHTTPSで暗号化されてるよ」というサインだよ。HTTPだと通信内容がそのまま流れるから、途中で誰かに覗き見される可能性がある。HTTPSはその通信を暗号化して、第三者に中身を読まれないようにしてるんだ。

ひよこ ひよこ

HTTPに「S」がついただけで、そんなに変わるの?

ペンギン先生 ペンギン先生

「S」はSecureのSだよ。具体的には、HTTPの下にTLS(Transport Layer Security)という暗号化の層を挟んでいるんだ。昔はSSLと呼ばれていたけど、今はTLSが正式名称。このTLSのおかげで、パスワードやクレジットカード番号を送っても途中で盗み読まれない仕組みになっているよ。

ひよこ ひよこ

TLSってどうやって暗号化を始めるの?いきなり暗号で話し始めるわけじゃないよね?

ペンギン先生 ペンギン先生

いい質問だね。暗号通信を始める前に「TLSハンドシェイク」という準備のやり取りがあるんだ。まずクライアント(ブラウザ)が「ClientHello」を送って、対応する暗号方式の一覧を伝える。サーバーが「ServerHello」で使う暗号方式を決めて返す。次にサーバーが証明書を送って「自分は本物だよ」と証明する。最後に鍵交換をして、共通の暗号鍵を作る。この一連の流れが終わると、やっと暗号化通信がスタートするよ。

ひよこ ひよこ

公開鍵暗号共通鍵暗号っていう言葉を聞いたことがあるけど、両方使うの?

ペンギン先生 ペンギン先生

そう、HTTPSは両方を組み合わせて使っているよ。公開鍵暗号は「鍵を安全に渡す」ために使って、実際のデータの暗号化には共通鍵暗号を使うんだ。公開鍵暗号は安全だけど処理が重い、共通鍵暗号は高速だけど鍵を相手に安全に渡すのが難しい。だから最初の鍵交換だけ公開鍵暗号を使って、共通鍵を安全に共有してから、あとは高速な共通鍵暗号で通信する。お互いの長所を活かしたハイブリッド方式だね。

ひよこ ひよこ

サーバーの証明書って、誰が「本物」って保証してくれるの?

ペンギン先生 ペンギン先生

それが「認証局」の役割だよ。サーバー証明書にはCAの電子署名が入っていて、ブラウザはその署名を検証するんだ。実は証明書はチェーン(連鎖)になっていて、サーバー証明書→中間CA→ルートCAとたどっていく。ルートCAの証明書はブラウザやOSにあらかじめ組み込まれているから、そこまでたどれれば「信頼できる」と判断される仕組みだよ。

ひよこ ひよこ

証明書を取るのってお金がかかるんじゃなかったっけ?

ペンギン先生 ペンギン先生

昔は有料が当たり前だったけど、2015年にLet's Encryptという無料のCAが登場して状況が変わったよ。自動で証明書を発行・更新できるから、個人のブログでも簡単にHTTPS化できるようになった。これが「常時HTTPS化」を一気に後押ししたんだ。今ではWebサイトの9割以上がHTTPSを使っているよ。

ひよこ ひよこ

TLSにもバージョンがあるって聞いたけど、最新版は何が違うの?

ペンギン先生 ペンギン先生

最新のTLS 1.3は2018年に策定されたバージョンだよ。大きな改善点は2つ。まずハンドシェイクが高速化されて、TLS 1.2では2往復必要だったのが1往復で済むようになった。これだけでページの表示が体感できるレベルで速くなる。もう1つは安全性の向上で、古くて弱い暗号方式がばっさり削除されたんだ。設定ミスで危険な暗号を使ってしまうリスクがなくなったよ。

ひよこ ひよこ

じゃあHTTPSなら絶対安全ってこと?

ペンギン先生 ペンギン先生

「通信経路の安全」は確保されるけど、「通信相手が善良かどうか」は別問題だよ。フィッシングサイトでもHTTPS対応しているものはたくさんある。鍵マークは「通信が暗号化されている」ことを意味するだけで、「サイトが安全」という意味ではないんだ。だから鍵マークだけで安心せず、URLドメインをちゃんと確認する習慣が大事だね。