はじめに
SSL/TLSの仕組みを勉強していると、「サーバー証明書の公開鍵」と「TLSの共通鍵を交換するための公開鍵」がゴッチャになって混乱することがよくあります。
この記事では、
✅ サーバー証明書のデジタル署名とは?
✅ サーバー証明書の構造と公開鍵の役割
✅ TLSの鍵交換時に使う公開鍵との違い
✅ なぜ今の主流では「証明書の公開鍵を鍵交換に使わない」のか?
を、できるだけ分かりやすく解説します。
1. サーバー証明書のデジタル署名とは?
サーバー証明書には、認証局 (CA) によるデジタル署名が含まれています。
この署名の役割は、「この証明書はCAが発行し、改ざんされていない」ことを証明することです。
🔹 署名の仕組み
- 証明書のハッシュ値を計算 (SHA-256 など)
- CAの秘密鍵でハッシュ値を署名
- 証明書に署名を埋め込む
- クライアントは、CAの公開鍵で署名を復号して検証
✅ ポイント
- デジタル署名は証明書のハッシュ値に対して行われる
- クライアントは、CAの公開鍵を使って署名を検証する
- 証明書の公開鍵とは別のもの (CAの鍵ペア)
2. サーバー証明書の構造と公開鍵
サーバー証明書は X.509 形式で、以下のような情報が含まれています。
項目 | 説明 |
---|---|
バージョン | X.509 のバージョン (通常は v3) |
シリアル番号 | 証明書ごとに異なる一意の番号 |
署名アルゴリズム | 署名に使用されたアルゴリズム (例: RSA-SHA256) |
発行者 (Issuer) | 証明書を発行した認証局 (CA) |
有効期限 (Validity) | 証明書の開始日・終了日 |
主体 (Subject) | 証明書の対象 (ドメイン名など) |
公開鍵 (Public Key) | サーバーの公開鍵 |
拡張情報 (Extensions) | SAN (Subject Alternative Name) などの追加情報 |
デジタル署名 | 証明書のハッシュに対する CA の署名 |
✅ ポイント
- サーバー証明書にはサーバーの公開鍵が含まれている。
- この公開鍵は、TLSでの鍵交換に使う場合と使わない場合がある。
- 証明書のデジタル署名は、この公開鍵ではなくCAの秘密鍵で行われる。
3. TLSの鍵交換と証明書の公開鍵は別物?
TLSの鍵交換時に使う公開鍵は、鍵交換方式によって異なります。
方式 | 証明書の公開鍵を使う? | 鍵交換の方法 |
---|---|---|
RSA鍵交換 (古い方式) | ✅ 使う | クライアントがTLS共通鍵を証明書の公開鍵で暗号化 |
ECDHE鍵交換 (現在主流) | ❌ 使わない | サーバーとクライアントが一時的な鍵を生成・交換 |
4. TLSの鍵交換方式の違い
① RSA鍵交換 (古い方式)
- クライアントは、TLSの「共通鍵 (セッション鍵)」をサーバー証明書の公開鍵で暗号化し、サーバーに送る。
- サーバーは、自分の秘密鍵で復号し、共通鍵を取得する。
- 以降の通信を共通鍵で暗号化。
✅ 特徴
- 証明書の公開鍵がそのまま鍵交換に使われる。
- ただし、Forward Secrecy (前方秘匿性) がないため、秘密鍵が漏れると過去の通信が解読されるリスクがある。
② ECDHE鍵交換 (現在主流)
- サーバーとクライアントが、それぞれ一時的な鍵 (Ephemeral Key) を生成し、交換する。
- サーバー証明書の公開鍵は「サーバーの正当性を証明するため」だけに使われ、鍵交換には使わない!
- 交換した鍵を使って、共通鍵を生成し、以降の通信を暗号化する。
✅ 特徴
- Forward Secrecy (前方秘匿性) あり → 秘密鍵が漏れても過去の通信は解読されない!
- サーバー証明書の公開鍵は「鍵交換のため」ではなく、「サーバーの正当性の証明」に使われるだけ。
5. まとめ
- サーバー証明書の公開鍵 = TLS共通鍵の暗号化に使うとは限らない!
- RSA鍵交換では証明書の公開鍵を使うが、ECDHE鍵交換では使わない!
- 今のTLSは ECDHE が主流なので、証明書の公開鍵は鍵交換には使わないことが多い!
- 証明書のデジタル署名は、証明書のハッシュに対してCAの秘密鍵で行われる!