TLS / SSL(暗号化通信)
通信を盗聴・改ざん・なりすましから守る暗号化の仕組み。HTTPS の“S”の正体で、Webの安全はほぼこれに支えられている。
- 1.TLS(旧称 SSL)は通信を暗号化し、盗聴・改ざん・なりすましを防ぐ仕組み。HTTPS の“S”はこれ。
- 2.ハンドシェイクで鍵を安全に共有し、実データは高速な共通鍵で暗号化する“ハイブリッド方式”。
- 3.相手が本物かは証明書とCA(認証局)の信頼チェーンで検証する。今は TLS 1.3 が主流。
なぜ暗号化が要る?
普通の HTTP は、内容を そのまま(平文で) 流します。通信経路には、途中のWi-Fiルータ・プロバイダ・経由するネットワーク機器など、たくさんの“他人”がいます。暗号化がないと、TLS は次の3つを同時に守れません。
- 盗聴(機密性):パスワードやクレジットカード番号を経路の途中で読まれる
- 改ざん(完全性):受け取る前にこっそり中身を書き換えられる(広告挿入・マルウェア混入など)
- なりすまし(真正性):偽サイトを本物だと思い込まされる(フィッシング)
暗号化(盗聴対策)だけでは「今つながっている相手が本物か」は分かりません。偽サーバと暗号通信していても無意味です。だから TLS は、暗号化と 相手の身元確認(証明書) をセットで行います。ここが肝。
仕組み:ハイブリッド暗号
TLS は2種類の暗号を 役割分担 させて使います。これが「ハイブリッド方式」です。
- 公開鍵暗号(非対称):鍵が「公開鍵」と「秘密鍵」のペア。安全だが 遅い。→ 最初の鍵交換だけに使う
- 共通鍵暗号(対称):暗号化と復号で同じ鍵を使う。速い が、その鍵を相手にどう安全に渡すかが課題。→ 実データの暗号化に使う
つまり「遅いけど安全な公開鍵で、速い共通鍵を安全に共有し、あとは共通鍵で大量データを暗号化する」という良いとこ取りです。
| 公開鍵暗号(非対称) | 共通鍵暗号(対称) | |
|---|---|---|
| 鍵 | 公開鍵+秘密鍵のペア | 1つの共通鍵を共有 |
| 速度 | 遅い | 速い |
| TLSでの役割 | ハンドシェイクで鍵交換・認証 | 実データの暗号化 |
| 代表例 | RSA / ECDSA / ECDHE | AES-GCM / ChaCha20 |
ハンドシェイク(接続のはじめ)
実データを送る前に、暗号化のための取り決めを行うのが ハンドシェイク です。TLS 1.3 の典型的な流れはこうです。
- ClientHello:クライアントが「対応する暗号方式(暗号スイート)と TLS バージョン」を提示し、鍵交換用の値も一緒に送る
- ServerHello:サーバが暗号方式を1つ選び、自分の鍵交換用の値と 証明書 を返す
- 鍵の合成:両者がそれぞれの値を使い、同じ共通鍵を各自で計算 する(鍵そのものは経路に流れない)
- 検証完了:クライアントは証明書を検証し、以降は共通鍵で暗号化した通信に切り替わる
現代の TLS(ECDHE 等の鍵交換)では、共通鍵そのものをネットワークに流しません。両者が材料を交換し、各自が手元で同じ鍵を導出 します。これにより、後で秘密鍵が漏れても 過去の通信は解読されない(前方秘匿性 / Forward Secrecy)という強みが得られます。
証明書とCA・信頼チェーン
「サーバが返す公開鍵は、本当に example.com のものか?」を保証するのが サーバ証明書 です。証明書には ドメイン名・公開鍵・有効期限 などが書かれ、それを CA(認証局 / Certificate Authority) が秘密鍵で 電子署名 しています。
検証はこう連鎖します(信頼チェーン)。
- サーバ証明書は 中間CA の署名で保証される
- 中間CAの証明書は ルートCA の署名で保証される
- ルートCAの証明書は、OS・ブラウザに 最初から組み込まれている(=信頼の起点 / トラストストア)
この鎖がルートまで途切れず辿れて、かつドメイン名・有効期限が一致して初めて「本物」と判断されます。
鍵マークは「通信が暗号化されている」ことを示すだけで、「運営者が善良」という意味ではありません。証明書は誰でも(攻撃者でも)取得でき、フィッシングサイトが HTTPS であることはよくあります。鍵マークではなく、URLのドメイン名そのものを確認 してください。
証明書の種類(ざっくり)
審査の厳しさで、主に3種類あります。表示の違いは年々小さくなっていますが、用途で選びます。
| 種類 | 確認するもの | 向き |
|---|---|---|
| DV(ドメイン認証) | ドメインの保有のみ(自動・無料も多い) | 個人サイト・一般的なWeb全般 |
| OV(組織認証) | ドメイン+組織の実在 | 企業サイト |
| EV(拡張認証) | ドメイン+組織の厳格な審査 | 金融など高い信頼が要る場面 |
HTTPS との関係
HTTPS は新しいプロトコルではなく、HTTP を TLS の上で喋っているだけ です。
HTTP = HTTP (平文)
HTTPS = HTTP over TLS (TLSで暗号化された通信路の中をHTTPが流れる)
TLS はアプリより下の層で働くので、HTTP の中身(メソッド・ヘッダ・本文)は アプリ側がほぼ意識せず まるごと暗号化されます。詳しくは /network/http/ も参照。なお TLS の標準ポートは 443 です。
TLS 1.2 と 1.3 の違い
長く使われてきた 1.2 に対し、1.3 は安全性と速度を大きく改善しました。古い・危険な方式(RSA鍵交換や古い暗号)を仕様から削っています。
| 項目 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| ハンドシェイク往復 | 2往復(2-RTT) | 1往復(1-RTT)で高速 |
| 前方秘匿性 | 選択次第(任意) | 常に有効(必須) |
| 古い弱い暗号 | 残っている | 削除済みで選べない |
| 再接続 | セッション再開あり | 0-RTT で再接続をさらに高速化(注意点あり) |
| 登場 | 2008年 | 2018年(現在の主流) |
TLS 1.3 の 0-RTT(再接続時に往復ゼロで最初のデータを送る)は高速ですが、その最初のデータは リプレイ攻撃(同じ送信の使い回し) を受けうるため、決済のような“2回実行されると困る”処理には使わない のが原則です。
つまずきポイント
- 「SSL証明書」と呼ぶが中身は TLS。慣習で SSL という語が残っているだけで、SSL 2.0/3.0 は脆弱なため使ってはいけません
- 証明書の有効期限切れは最頻出の事故。期限が来ると一斉にエラーになるので、自動更新(ACME / certbot 等) を入れておく
- 中間証明書の入れ忘れで「自分のブラウザは緑だが、他環境では信頼チェーン切れ」が起きる。サーバには サーバ証明書+中間証明書をセット で設定する
- 時刻ずれでも検証は失敗する。証明書の有効期間判定はサーバ/クライアントの時計に依存するため、NTPで時刻同期 を
ハンズオン
# サーバが返す証明書の中身(CN/有効期限/発行者)を確認
openssl s_client -connect example.com:443 -servername example.com </dev/null \
| openssl x509 -noout -subject -issuer -dates
# ネゴシエートされた TLS バージョンと暗号スイートを確認
openssl s_client -connect example.com:443 -servername example.com </dev/null \
| grep -E "Protocol|Cipher"
# TLS 1.3 で接続できるか試す
openssl s_client -connect example.com:443 -tls1_3 </dev/null
# curl で証明書チェーン込みの詳細を見る
curl -vI https://example.com 2>&1 | grep -E "SSL|subject|issuer|TLS"
ネットワーク Article
TLS / SSL(暗号化通信)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
暗号化
比較で見る軸
難易度: intermediate / カテゴリ: ネットワーク / タグ数: 4
導入後に効く点
ハンドシェイクで鍵を安全に共有し、実データは高速な共通鍵で暗号化する“ハイブリッド方式”。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- ネットワーク
- タグ数
- 4
判断チェックリスト
- 自社の用途が「暗号化 / TLS」に近いか確認する。
- 強みである「TLS(旧称 SSL)は通信を暗号化し、盗聴・改ざん・なりすましを防ぐ仕組み。HTTPS の“S”はこれ。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。