コンテンツにスキップ

証明書チェーンと信頼

証明書チェーンは、検証対象の 証明書 から、検証側が信頼するTrust Anchorまでを署名関係でつないだ経路。


Root CA
└─ Intermediate CA
└─ Server Certificate

署名する方向:

Root CA秘密鍵
→ Intermediate CA証明書へ署名
Intermediate CA秘密鍵
→ Server Certificateへ署名

検証する方向:

Server Certificate
→ Intermediate CAの公開鍵で署名を検証
→ Root CAの公開鍵で署名を検証
→ 信頼済みRoot CAへ到達

Trust Anchorは、証明書チェーン検証で信頼の起点として扱う 公開鍵 と名前の情報である。実際には、信頼済みRoot CA証明書としてTrust Storeへ格納されることが多い。

Trust Storeは、検証側が信頼するCA証明書を保管する場所である。

Trust Storeの例:

  • OSのCA証明書ストア
  • WebブラウザーのCA証明書ストア
  • JavaのTrust Store
  • アプリケーション独自のCAファイル
  • openssl verify -CAfile で明示した証明書

証明書の確認は大きく2段階に分かれる。

対象証明書のIssuerに一致するCA証明書を探し、Trust Anchorまでの経路を組み立てる。

主に次の情報が使用される。

  • SubjectとIssuer
  • Authority Key Identifier
  • Subject Key Identifier
  • 利用可能な中間CA証明書
  • Trust Store

構築したチェーンに対して、主に次を確認する。

  • 各証明書の署名
  • 有効期間
  • CA証明書の basicConstraints
  • CA証明書の keyUsage
  • pathlen などの階層制約
  • 指定した場合は証明書の用途、DNS名、IPアドレス

一般的なTLSでは、サーバーはサーバー証明書と必要なIntermediate CA証明書を送信する。Root CA証明書は通常、クライアントのTrust Storeにあるものを使用する。

サーバーが送る
server.crt
intermediate.crt
クライアントが保持する
root.crt

Root CAをサーバーから送っても、それだけでクライアントが信頼するわけではない。


Terminal window
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として直接信頼せず、チェーン構築の候補として使用することを表す。


基本的な openssl verify で OK になった場合、指定したTrust Anchorまで有効なチェーンを構築できたことを示す。

TLSサーバー証明書として確認する場合は、用途と接続先名も指定する。

Terminal window
openssl verify \
-CAfile root.crt \
-untrusted intermediate.crt \
-purpose sslserver \
-verify_hostname www.example.com \
server.crt


  • RFC 5280 Certification PathとTrust Anchor、証明書チェーン検証。