コンテンツにスキップ

証明書の失効

失効は、有効期限が残っている 証明書 を、それ以降は信頼しない状態にすること。


  • 秘密鍵 が漏えいした
  • 証明書の内容が誤っていた
  • サーバーや利用者が廃止された
  • CAが証明書を不正発行した
  • CA自身の秘密鍵が漏えいした

証明書ファイル自体を書き換えて無効化することはできない。 CA が失効状態を公開し、検証側がその情報を確認する。


状態 意味
期限切れ notAfter を過ぎたため無効
失効 有効期間内だが、CAが無効として登録

失効は、有効期限まで待てない問題が発生した場合に使用する。


CRL(Certificate Revocation List)は、CAが失効させた証明書のシリアル番号などをまとめ、CAまたはCRL Issuerが署名したリストである。

主な情報:

  • CRLのIssuer
  • thisUpdate
  • nextUpdate
  • 失効した証明書のシリアル番号
  • 失効日時
  • 失効理由
  • CRLの署名

CRLは一定間隔で更新されるため、検証側が古いCRLを使用すると最新の失効状態を確認できない。


OCSP(Online Certificate Status Protocol)は、特定の証明書の状態をOCSP Responderへ問い合わせる方式である。

代表的な応答状態:

状態 意味
good 失効として記録されていない
revoked 失効している
unknown Responderが状態を判断できない

CRLが失効一覧を取得する方式であるのに対し、OCSPは証明書ごとに状態を問い合わせる。


openssl ca は、発行済み証明書と失効状態を index.txt で管理する。

証明書を失効させる:

Terminal window
openssl ca \
-config ca.cnf \
-revoke server.crt

CRLを生成する:

Terminal window
openssl ca \
-config ca.cnf \
-gencrl \
-out ca.crl

CRLの内容を確認する:

Terminal window
openssl crl \
-in ca.crl \
-text \
-noout

証明書チェーン の署名検証に成功しても、失効確認を行っていなければ、その証明書が失効しているかどうかは判断できない。

openssl verify でCRLを確認する例:

Terminal window
openssl verify \
-CAfile root.crt \
-untrusted intermediate.crt \
-CRLfile intermediate.crl \
-crl_check \
server.crt

失効確認の方法や失敗時の扱いは、TLSクライアントやアプリケーションごとに異なる。



  • RFC 5280 X.509 CRLの構造と失効確認。

  • RFC 6960 Online Certificate Status Protocol。