証明書チェーンと信頼
証明書チェーンは、検証対象の 証明書 から、検証側が信頼するTrust Anchorまでを署名関係でつないだ経路。
証明書チェーンの例
Section titled “証明書チェーンの例”Root CA └─ Intermediate CA └─ Server Certificate署名する方向:
Root CA秘密鍵 → Intermediate CA証明書へ署名
Intermediate CA秘密鍵 → Server Certificateへ署名検証する方向:
Server Certificate → Intermediate CAの公開鍵で署名を検証 → Root CAの公開鍵で署名を検証 → 信頼済みRoot CAへ到達Trust Anchor
Section titled “Trust Anchor”Trust Anchorは、証明書チェーン検証で信頼の起点として扱う 公開鍵 と名前の情報である。実際には、信頼済みRoot CA証明書としてTrust Storeへ格納されることが多い。
Trust Store
Section titled “Trust Store”Trust Storeは、検証側が信頼するCA証明書を保管する場所である。
Trust Storeの例:
- OSのCA証明書ストア
- WebブラウザーのCA証明書ストア
- JavaのTrust Store
- アプリケーション独自のCAファイル
openssl verify -CAfileで明示した証明書
チェーン構築とチェーン検証
Section titled “チェーン構築とチェーン検証”証明書の確認は大きく2段階に分かれる。
チェーン構築
Section titled “チェーン構築”対象証明書のIssuerに一致するCA証明書を探し、Trust Anchorまでの経路を組み立てる。
主に次の情報が使用される。
- SubjectとIssuer
- Authority Key Identifier
- Subject Key Identifier
- 利用可能な中間CA証明書
- Trust Store
チェーン検証
Section titled “チェーン検証”構築したチェーンに対して、主に次を確認する。
- 各証明書の署名
- 有効期間
- CA証明書の
basicConstraints - CA証明書の
keyUsage pathlenなどの階層制約- 指定した場合は証明書の用途、DNS名、IPアドレス
Root CAとIntermediate CAの渡し方
Section titled “Root CAとIntermediate CAの渡し方”一般的なTLSでは、サーバーはサーバー証明書と必要なIntermediate CA証明書を送信する。Root CA証明書は通常、クライアントのTrust Storeにあるものを使用する。
サーバーが送る server.crt intermediate.crt
クライアントが保持する root.crtRoot CAをサーバーから送っても、それだけでクライアントが信頼するわけではない。
OpenSSLでの検証
Section titled “OpenSSLでの検証”openssl verify \ -CAfile root.crt \ -untrusted intermediate.crt \ server.crt| 指定 | 役割 |
|---|---|
-CAfile root.crt |
信頼するTrust Anchor |
-untrusted intermediate.crt |
チェーン構築に使用するIntermediate CA |
server.crt |
検証対象 |
-untrusted は「無効な証明書」という意味ではない。Trust Anchorとして直接信頼せず、チェーン構築の候補として使用することを表す。
OK が意味する範囲
Section titled “OK が意味する範囲”基本的な openssl verify で OK になった場合、指定したTrust Anchorまで有効なチェーンを構築できたことを示す。
TLSサーバー証明書として確認する場合は、用途と接続先名も指定する。
openssl verify \ -CAfile root.crt \ -untrusted intermediate.crt \ -purpose sslserver \ -verify_hostname www.example.com \ server.crt- RFC 5280 Certification PathとTrust Anchor、証明書チェーン検証。
OpenSSL公式ドキュメント
Section titled “OpenSSL公式ドキュメント”-
openssl-verification-options Trust Anchor、チェーン構築、チェーン検証の詳細。
-
openssl-verify OpenSSLでの証明書チェーン検証。