暗号化・安全な通信

TLS/SSL

約 4 分で読めます

TLS/SSL とは

TLS (Transport Layer Security) は、インターネット上の通信を暗号化するプロトコルです。SSL (Secure Sockets Layer) はその前身で、現在は脆弱性のため非推奨ですが、慣習的に「SSL」や「SSL/TLS」と呼ばれることが多いです。

Web ブラウザのアドレスバーに表示される鍵マークと HTTPS は、TLS による暗号化通信が行われていることを示しています。TLS はオンラインバンキング、EC サイト、メール、チャットなど、あらゆるインターネット通信の安全を支える基盤技術です。

TLS の仕組み - ハンドシェイク

TLS 通信は「ハンドシェイク」と呼ばれる手順で始まります。

  1. Client Hello: クライアントが対応する TLS バージョンと暗号スイートの一覧をサーバーに送信
  2. Server Hello: サーバーが使用する暗号スイートを選択し、デジタル証明書を送信
  3. 鍵交換: 公開鍵暗号方式を使って共通鍵を安全に共有
  4. 暗号化通信開始: 共有した共通鍵で以降の通信を暗号化

TLS 1.3 ではハンドシェイクが 1-RTT (1 往復) に短縮され、TLS 1.2 の 2-RTT から大幅に高速化されました。

TLS 1.3 で変わったこと

TLS 1.3 (RFC 8446、2018 年策定) は単なるマイナーアップデートではなく、プロトコル設計の根本的な見直しが行われました。

廃止された暗号スイート
RC4、3DES、CBC モードの暗号、静的 RSA 鍵交換、SHA-1 など、安全性に懸念のあるアルゴリズムがすべて削除された。TLS 1.3 で使える暗号スイートは 5 種類のみに絞られ、設定ミスによる脆弱性のリスクが大幅に低減している。
0-RTT 再接続
過去に接続したサーバーへの再接続時、ハンドシェイク完了を待たずにデータを送信できる。ページ読み込みの体感速度が向上するが、リプレイ攻撃のリスクがあるため、冪等でないリクエスト (決済処理など) には使用すべきでない。
前方秘匿性の必須化
TLS 1.2 ではオプションだった前方秘匿性 (Forward Secrecy) が必須となった。サーバーの秘密鍵が将来漏洩しても、過去の通信内容は復号できない。鍵交換は ECDHE (楕円曲線 Diffie-Hellman) に統一されている。

証明書の種類と選び方

  • DV (Domain Validation): ドメインの所有権のみを検証。Let's Encrypt で無料取得可能。個人サイトやブログに適している。発行まで数分で完了する。
  • OV (Organization Validation): 組織の実在性も検証。企業サイトで一般的。発行には数日かかり、登記簿や電話確認が必要。
  • EV (Extended Validation): 最も厳格な審査を経て発行。以前はアドレスバーに組織名が緑色で表示されたが、現在の主要ブラウザではこの表示は廃止されている。

証明書の種類による暗号化の強度に違いはありません。違いは「誰がそのドメインを運営しているか」の検証レベルです。個人サイトや中小規模のサービスであれば DV 証明書で十分であり、EV 証明書のコスト (年間数万円から数十万円) に見合う効果は薄れています。

Let's Encrypt と証明書の自動管理

Let's Encrypt は 2016 年に正式サービスを開始した無料の認証局で、ACME (Automatic Certificate Management Environment) プロトコルによる証明書の自動発行・更新を実現しました。現在、Web 上の TLS 証明書の約 3 割が Let's Encrypt によって発行されています。

ACME プロトコルでは、ドメインの所有権を HTTP-01 チャレンジ (指定パスにトークンファイルを配置) または DNS-01 チャレンジ (DNS TXT レコードにトークンを設定) で自動検証します。Certbot や acme.sh などのクライアントツールを使えば、証明書の取得から Web サーバーへの設定、90 日ごとの自動更新まで完全に自動化できます。

AWS 環境では ACM (AWS Certificate Manager) が同様の自動管理を提供しており、CloudFront や ALB に設定した証明書は自動更新されます。

TLS 設定の検証方法

サーバーの TLS 設定が安全かどうかは、以下のツールで検証できます。

  • SSL Labs (ssllabs.com): Qualys が提供する無料のオンラインテスト。A+ から F までのグレードで評価され、対応プロトコル、暗号スイート、証明書チェーン、既知の脆弱性 (BEAST、POODLE、Heartbleed 等) を網羅的にチェックする。本番サーバーの定期チェックに最適。
  • testssl.sh: コマンドラインで動作するオープンソースツール。内部サーバーやステージング環境など、外部からアクセスできないサーバーのテストに使える。./testssl.sh example.com で実行。

よくある設定ミスとして、TLS 1.0/1.1 が有効なまま放置されている、弱い暗号スイート (RC4、3DES) が残っている、証明書チェーンに中間証明書が欠落している、HSTS ヘッダーが未設定、といったケースがあります。SSL Labs で B 以下の評価が出た場合は、早急に設定を見直すべきです。

よくある誤解

SSL と TLS は別の技術
TLS は SSL の後継プロトコルです。SSL 3.0 の後に TLS 1.0 が策定され、現在は TLS 1.2/1.3 が使われています。「SSL 証明書」という呼称は慣習的なもので、実際には TLS 証明書です。
HTTPS なら絶対に安全
HTTPS は通信経路の暗号化を保証しますが、接続先のサイト自体が安全かどうかは別問題です。フィッシングサイトも HTTPS を使用しているため、鍵マークだけで信頼してはいけません。

TLS 1.2 と TLS 1.3 の比較

TLS 1.2

2008 年策定。ハンドシェイク 2-RTT。多数の暗号スイートをサポート (一部は安全性が低い)。前方秘匿性はオプション。

TLS 1.3

2018 年策定。ハンドシェイク 1-RTT。安全な暗号スイートのみに限定。前方秘匿性が必須。0-RTT 再接続をサポート。

関連用語

関連記事