Skip to content

SSL/TLSの仕組み (Deep Dive)

このドキュメントでは、SSL/TLSの基本的な仕組みから、暗号化の技術的詳細、バージョンごとの違い、そして現代のWebにおける役割について詳しく解説します。

1. SSL/TLSとは?

SSL (Secure Sockets Layer) および TLS (Transport Layer Security) は、インターネット上でデータを安全にやり取りするための暗号化プロトコルです。 現在広く使われているのは TLS ですが、歴史的な経緯からまとめて 「SSL/TLS」 や単に 「SSL」 と呼ばれることが一般的です。

SSL/TLS あり vs なし

特徴HTTP (SSL/TLSなし)HTTPS (SSL/TLSあり)
通信内容平文 (Clear Text)暗号化 (Encrypted)
安全性盗聴・改ざん・なりすましが可能盗聴・改ざん・なりすましが困難
URLhttp://...https://...
ブラウザ表示「保護されていない通信」警告鍵アイコン 🔒
ポート80443

🕵️‍♂️ どうやって傍受するのか? (SSL/TLSなしの場合)

インターネットは「バケツリレー」のような仕組みです。あななのPCからサーバーに届くまでに、Wi-Fiルーター、プロバイダ(ISP)、IX(相互接続点)など、多くの機器を経由します。

もし暗号化されていない場合、これらの経由地点の管理者がパケットキャプチャツール(Wiresharkなど)を使うと、以下のように中身が丸見えになります。

http
POST /login HTTP/1.1
Host: example.com
User: my_username
Password: secret_password  <-- 丸見え!!

🔒 なぜ傍受できないのか? (SSL/TLSありの場合)

SSL/TLSを使うと、通信内容は以下のような意味不明な文字列に変換されます。

Encrypted Data: 7f8a9d0e1c2b3a4f... (解読不能)

たとえ途中の経路でパケットをコピーされても、「復号するための鍵」 を持っていなければ、中身を元のデータに戻すことは数学的に極めて困難です(スーパーコンピュータを使っても何千年もかかるレベル)。

2. 暗号化の仕組み

SSL/TLSは、「公開鍵暗号」「共通鍵暗号」 という2つの方式を組み合わせた ハイブリッド暗号方式 を採用しています。

登場人物と鍵の種類

  1. 共通鍵 (Symmetric Key)
    • 特徴: 暗号化と復号に 「同じ鍵」 を使います。
    • メリット:処理が高速。大量のデータ(動画やWebページ全体)の暗号化に向いています。
    • デメリット: 相手に鍵を渡すときに盗まれたら終わりです(鍵配送問題)。
  2. 公開鍵 (Public Key) & 秘密鍵 (Private Key) - 公開鍵暗号方式
    • 特徴: ペアで作成します。「公開鍵で暗号化したものは、対になる秘密鍵でしか復号できない」 という数学的性質を持ちます。
    • 公開鍵: 世界中にバラ撒いてもOK。誰でもこれを使って暗号化できます。
    • 秘密鍵: サーバー管理者だけが厳重に保管。絶対に人に見せてはいけません。

🤝 ハイブリッド暗号の仕組み (図解)

SSL/TLSでは、最初の「鍵交換」だけ公開鍵暗号を使い、その後の「データ通信」は共通鍵暗号を使います。

Q. なぜ公開鍵を公開しても大丈夫?

A. 公開鍵は 「暗号化専用(南京錠をかける役割)」 だからです。南京錠そのものを配っても、それを開けるための「鍵(秘密鍵)」を持っていなければ、中身を見ることはできません。

Q. なぜ共通鍵だけでなく秘密鍵が必要?

A. 最初から共通鍵で通信しようとすると、インターネット越しにその共通鍵を相手に渡す必要があります。その「渡す瞬間」を盗聴されたら意味がありません。 「片方向しか通さない(暗号化しかできない)」公開鍵暗号を使うことで、安全に共通鍵を共有できるのです。

3. バージョンについて

SSL/TLSプロトコルは時代とともに進化し、古いバージョンは脆弱性が見つかって非推奨になっています。

バージョンステータス理由・リスク
SSL 2.0 / 3.0禁止深刻な脆弱性 (POODLEなど) あり。
TLS 1.0 / 1.1非推奨脆弱性 (BEAST, CRIMEなど) あり。多くのブラウザで無効化済み。
TLS 1.2推奨現在の主流。AES暗号などが標準化され安全。
TLS 1.3最新・推奨ハンドシェイク手順を簡略化し 高速化。古い暗号スイートを排除し より安全

プロジェクト要件: TLS 1.2 または 1.3 のみ を許可することが求められています。

4. どこで使われているか?

SSL/TLSはWeb以外でも、インターネット上のあらゆる通信で使われています。

  • HTTPS (Webサイト): ネットショッピング、SNS、ネットバンキングなど。現在はGoogle検索順位への影響もあり、個人ブログ含め常時SSL化が標準です。
  • メール (SMTPS, IMAPS, POP3S): メールの送受信内容やパスワードの保護。
  • FTPS (File Transfer Protocol Secure): ファイル転送の保護(Docker Infrastructureのボーナス課題でも使用)。
  • VPN (Virtual Private Network): SSL-VPNなど、企業内ネットワークへの安全な接続。
  • IoT・アプリ間通信: スマホアプリのAPI通信や、スマート家電の制御通信。

5. その他・豆知識

📛 なぜ「SSL/TLS」と呼ぶのか?

元々Netscape社が開発したのが「SSL (Secure Sockets Layer)」でした。バージョン3.0まで作られました。 その後、標準化団体IETFに移管された際に名前が「TLS (Transport Layer Security)」に変わりました。 実質的に SSL 3.1 = TLS 1.0 です。 現在はTLSが使われていますが、長年の名残で「SSL証明書」のように呼ばれ続けています。

🏢 サーバー側とユーザー側の役割

  • サーバー側 (Nginxなど): 証明書と秘密鍵を管理し、Webサーバーの設定で「どのバージョンのTLSを許可するか」「どの暗号方式を使うか」を指定します。
  • ユーザー側 (ブラウザ・OS): 信頼できる「ルート証明書(認証局の証明書)」をあらかじめ持っています。これを使って、接続先サーバーから送られてきた証明書が正しいかを検証します。

📱 通信できないケース(古い端末など)

新しい暗号方式やTLS 1.3に対応していない古いOS(古いAndroid端末、Windows XP、ガラケーなど)は、最新のセキュリティ設定がされたサーバーに接続できません。 「ハンドシェイク失敗」や「安全な接続を確立できません」といったエラーになります。 セキュリティと互換性はトレードオフの関係にあります。

Released under the MIT License.