暗号化・認証

SSL/TLSの仕組みを完全解説 — 暗号化通信とデジタル証明書の基礎

ネットワーク SSL/TLS 暗号化

SSL/TLSの仕組みを完全解説
暗号化通信とデジタル証明書の基礎

SSL/TLSはHTTPS通信の基盤となる暗号化プロトコルです。
ハンドシェイクの流れ、証明書チェーン、暗号スイートの仕組みなど、ネットワークスペシャリスト試験で問われるポイントを解説します。

こんな人向けの記事です

  • SSL/TLSの仕組みを体系的に理解したい
  • TLSハンドシェイクの流れを把握したい
  • デジタル証明書とPKIの仕組みを知りたい

Step 1SSL/TLSの概要

SSL(Secure Sockets Layer)とTLS(Transport Layer Security)は、通信を暗号化してデータの盗聴・改ざんを防ぐプロトコルです。現在はSSLは非推奨となり、TLS 1.2/1.3が使われています。

バージョン状態備考
SSL 2.0廃止重大な脆弱性あり
SSL 3.0廃止POODLE攻撃に脆弱
TLS 1.0非推奨BEAST攻撃のリスク
TLS 1.1非推奨2021年に主要ブラウザが無効化
TLS 1.2現行広く利用されている標準
TLS 1.3最新2018年策定。高速・高セキュリティ
SSL/TLSが提供する3つの機能
機密性:共通鍵暗号による通信データの暗号化
完全性:MAC(メッセージ認証コード)による改ざん検知
認証:デジタル証明書によるサーバー(/クライアント)の認証

Step 2暗号技術の基礎

種類方式特徴代表的なアルゴリズム
共通鍵暗号同じ鍵で暗号化・復号高速だが、鍵の受け渡しが課題AES, ChaCha20
公開鍵暗号公開鍵で暗号化、秘密鍵で復号鍵配送が容易だが低速RSA, ECDSA
鍵交換安全に共通鍵を共有盗聴されても鍵を推測できないDH, ECDHE
ハッシュ固定長のダイジェストを生成一方向性、改ざん検知に利用SHA-256, SHA-384
TLSで暗号を組み合わせる理由
TLSでは公開鍵暗号で安全に鍵を交換し、実際のデータ通信は共通鍵暗号で高速に行います。さらにハッシュで改ざんを検知します。これをハイブリッド暗号方式と呼びます。

Step 3TLSハンドシェイク

TLS 1.2 ハンドシェイク(2-RTT)

Client Hello
(対応バージョン、暗号スイート、乱数)
↓ ↑
Server Hello + 証明書 + 鍵交換
(選択した暗号スイート、サーバー証明書、DH公開値)
↓ ↑
Client 鍵交換 + ChangeCipherSpec + Finished
(プリマスターシークレット送信)
↓ ↑
Server ChangeCipherSpec + Finished
(暗号化通信開始)
暗号スイートの読み方
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS        → プロトコル
ECDHE      → 鍵交換アルゴリズム(楕円曲線DH、前方秘匿性あり)
RSA        → サーバー認証アルゴリズム
AES_256_GCM → データ暗号化(AES 256bit、GCMモード)
SHA384     → ハッシュ(MAC)アルゴリズム
前方秘匿性(PFS: Perfect Forward Secrecy)
ECDHE等の一時的な鍵を使う方式では、サーバーの秘密鍵が漏洩しても過去の通信は復号できません。これを前方秘匿性(PFS)と呼びます。試験でもよく問われる重要概念です。

Step 4デジタル証明書とPKI

デジタル証明書は、公開鍵の所有者を証明するための電子文書です。CA(認証局)が発行し、PKI(公開鍵基盤)で信頼の連鎖を構築します。

証明書に含まれる情報(X.509形式)

フィールド内容
Subject証明書の所有者(ドメイン名、組織名等)
Issuer発行元CA
有効期間Not Before 〜 Not After
公開鍵所有者のRSA/ECDSA公開鍵
署名CAの秘密鍵による電子署名
SANSubject Alternative Name(複数ドメイン対応)

証明書チェーン(信頼の連鎖)

ルートCA証明書
(ブラウザ/OSにプリインストール)
↓ 署名
中間CA証明書
(ルートCAが署名)
↓ 署名
サーバー証明書
(中間CAが署名)

証明書の種類(検証レベル)

種類検証内容費用用途
DV(ドメイン認証)ドメイン所有権のみ無料〜安価個人サイト、ブログ
OV(企業認証)組織の実在性を確認中程度企業サイト
EV(拡張認証)厳格な組織審査高額金融機関、ECサイト

Step 5TLS 1.3の改善点

項目TLS 1.2TLS 1.3
ハンドシェイク2-RTT1-RTT(0-RTTも可能)
鍵交換RSA鍵交換も可能ECDHE/DHEのみ(PFS必須)
暗号スイート多数(脆弱なものも含む)安全なもののみ5種類に厳選
暗号化開始Finished後Server Hello直後
廃止された機能RC4, 3DES, SHA-1, 圧縮, 再ネゴシエーション
0-RTT(Early Data)
TLS 1.3では過去に接続したことがあるサーバーに対し、ハンドシェイク完了前にデータを送信できる0-RTTが可能です。ただし、リプレイ攻撃のリスクがあるため、冪等なリクエスト(GET等)にのみ使用が推奨されます。

Step 6証明書の確認と実践

openssl で証明書を確認
# サーバー証明書の取得と表示
openssl s_client -connect example.com:443 -showcerts

# 証明書の詳細を表示
openssl s_client -connect example.com:443 2>/dev/null |   openssl x509 -noout -text

# 有効期限の確認
openssl s_client -connect example.com:443 2>/dev/null |   openssl x509 -noout -dates

# 証明書チェーンの検証
openssl verify -CAfile ca-bundle.crt server.crt
curl でTLSバージョンを指定
# TLS 1.2で接続
curl --tlsv1.2 https://example.com

# TLS 1.3で接続
curl --tlsv1.3 https://example.com

# 使用された暗号スイートを表示
curl -v https://example.com 2>&1 | grep -i "SSL connection"

まとめ

  • SSL/TLSは機密性・完全性・認証の3機能を提供
  • 公開鍵暗号で鍵交換、共通鍵暗号でデータ暗号化(ハイブリッド方式)
  • TLS 1.2ハンドシェイクは2-RTT、暗号スイートで方式を決定
  • 証明書チェーン(ルートCA→中間CA→サーバー証明書)で信頼を検証
  • TLS 1.3は1-RTT、PFS必須、脆弱な暗号の廃止で高速・安全
  • 前方秘匿性(PFS)はECDHE等の一時鍵により過去の通信を保護