PKI と Proxy Server の SSL/TLS 通信フロー


パターン1: 通常のSSL/TLS通信(Proxyなし)

[Client]                    [Server]                    [CA (Certificate Authority)]
   |                           |                                    |
   |--- (1) ClientHello ------>|                                    |
   |                           |                                    |
   |<--- (2) ServerHello ------|                                    |
   |<--- (3) Certificate ------|                                    |
   |    (サーバ証明書送信)        |                                    |
   |                           |                                    |
   |--- (4) 証明書検証 -------->|                                    |
   |  ・発行者(Issuer)確認      |                                    |
   |  ・有効期限チェック         |                                    |
   |  ・失効リスト(CRL/OCSP)    |---(5) 証明書ステータス確認----------->|
   |                           |<---(6) ステータス応答-----------------|
   |  ・デジタル署名検証         |                                    |
   |    (CA公開鍵で検証)        |                                    |
   |                           |                                    |
   |--- (7) ClientKeyExchange ->|                                    |
   |    (暗号化されたPreMasterSecret)                               |
   |                           |                                    |
   |--- (8) ChangeCipherSpec ->|                                    |
   |--- (9) Finished ---------->|                                    |
   |                           |                                    |
   |<-- (10) ChangeCipherSpec -|                                    |
   |<-- (11) Finished ---------|                                    |
   |                           |                                    |
   |=== (12) 暗号化通信開始 ====|                                    |
   |                           |                                    |

パターン2: Forward Proxy経由のSSL/TLS通信

[Client]              [Forward Proxy]              [Server]              [CA]
   |                        |                         |                    |
   |-(1) CONNECT要求------->|                         |                    |
   | (例: CONNECT server:443)|                        |                    |
   |                        |                         |                    |
   |<-(2) 200 Connection----|                         |                    |
   |     Established         |                         |                    |
   |                        |                         |                    |
   |===(3) SSL Tunnel確立====|                         |                    |
   |                        |                         |                    |
   |-(4) ClientHello------->|-(転送)----------------->|                    |
   |                        |                         |                    |
   |<-(5) ServerHello-------|<-(転送)-----------------|                    |
   |<-(6) Certificate-------|<-(転送)-----------------|                    |
   |                        |                         |                    |
   |-(7) 証明書検証----------|--(透過的転送)---------->|                    |
   |    (Clientが直接実行)   |                         |                    |
   |                        |                         |                    |
   |-(8) KeyExchange------->|-(転送)----------------->|                    |
   |                        |                         |                    |
   |===(9) 暗号化通信========|===(透過的転送)==========|                    |
   |   (Proxyは内容を見れない)|                        |                    |

パターン3: SSL Inspection Proxy(中間者型)

[Client]              [Inspection Proxy]           [Server]              [CA]
   |                        |                         |                    |
   |-(1) ClientHello------->|                         |                    |
   |                        |-(2) ClientHello-------->|                    |
   |                        |                         |                    |
   |                        |<-(3) ServerHello--------|                    |
   |                        |<-(4) Server証明書-------|                    |
   |                        |                         |                    |
   |                        |-(5) 証明書検証--------->|---(CRL/OCSP)----->|
   |                        |                         |<-------------------|
   |                        |                         |                    |
   |<-(6) ServerHello------|                         |                    |
   |<-(7) Proxy発行の--------|                         |                    |
   |     代理証明書          |                         |                    |
   |  (Proxyの秘密鍵で署名)  |                         |                    |
   |                        |                         |                    |
   |-(8) 証明書検証:         |                         |                    |
   |  ★Proxy CAが信頼済み  |                         |                    |
   |    ストアに必要         |                         |                    |
   |                        |                         |                    |
   |-(9) KeyExchange------->|                         |                    |
   |                        |-(10) KeyExchange------->|                    |
   |                        |                         |                    |
   |===(11)暗号化通信=======|===(12)暗号化通信========|                    |
   | (Proxy-Client間)       | (Proxy-Server間)        |                    |
   |                        |                         |                    |
   |                        |--(13) 通信内容を--------                     |
   |                        |      復号化・検査                             |
   |                        |      (ウイルススキャン等)                      |

PKI証明書チェーンの検証フロー

[サーバ証明書]
      |
      | (1) 発行者(Issuer)を確認
      ↓
[中間CA証明書]
      |
      | (2) 発行者を確認
      ↓
[ルートCA証明書]
      |
      | (3) 信頼されたルート証明書
      |     ストアに存在するか確認
      ↓
[検証成功] → SSL/TLS通信続行

検証項目:
├─ (A) 証明書の有効期限
├─ (B) デジタル署名の検証
├─ (C) ドメイン名の一致(CN/SAN)
├─ (D) 証明書失効リスト(CRL)
└─ (E) OCSPレスポンス確認

重要なセキュリティポイント

[証明書検証失敗のケース]

1. 期限切れ
   証明書の有効期限 < 現在時刻 → エラー

2. 自己署名証明書
   発行者 = サブジェクト → 警告
   (信頼されたストアになし)

3. ドメイン不一致
   証明書のCN/SAN ≠ アクセス先ドメイン → エラー

4. 失効された証明書
   CRL/OCSPで失効確認 → エラー

5. 証明書チェーン不完全
   中間CA証明書が欠落 → エラー 

このフローチャートは情報処理安全確保支援士試験の出題範囲に基づいています。ご質問があればお気軽にどうぞ!