証明書は「期限が切れたら使えない」というイメージが強いが、実務で怖いのは 期限内でも突然使えなくなるパターンである。
その代表が 失効(Revocation) で、これは「この証明書はもう信頼してはいけない」という判断を、期限とは別に配布する仕組みになる。
このページでは、失効が必要になる理由と、失効情報を配る仕組みである CRL と OCSP、そして運用(特にADCSで詰まりやすいポイント)を図中心で整理する。
証明書は「期限までの有効さ」だけでは足りず、途中で危険が分かったら止める必要がある。そこで失効の仕組みがある。
失効の典型はだいたい次。
ここで重要なのは、失効は「証明書を作り直す」だけでは済まないことがある点。
第三者が古い証明書を握っていたら、期限内は悪用できてしまう。だから「古い証明書は無効」と周知する仕組みが必要になる。
CRL(Certificate Revocation List)は、CAが公開する「失効した証明書の一覧」。
クライアント(ブラウザ等)は、証明書の中に書かれている CRL配布先(CDP) を見てCRLを取得し、対象証明書がリストに載っていないかを確認する。
OCSP(Online Certificate Status Protocol)は、証明書の状態を 1枚単位で問い合わせる仕組み。
クライアントは、証明書の中に書かれている OCSPレスポンダURL に対して照会し、「Good / Revoked / Unknown」のような応答を受け取る。
OCSPステープリング(OCSP Stapling)は、サーバがあらかじめOCSP応答を取得しておき、TLSハンドシェイク時にクライアントへ一緒に渡す方式。
クライアントが毎回OCSPレスポンダへ問い合わせなくてよくなり、速度とプライバシー面でメリットが出やすい。
ブラウザやOSの実装は細部が違うが、整理すると次の観点になる。
※ 実際のブラウザは、ネットワーク条件や速度の都合で「必ず毎回オンラインで確認する」とは限らない。だからこそ、運用側は「CRL/OCSPが落ちても良い」ではなく、落ちない設計を前提にした方が事故が少ない。
ADCS(社内CA)では、失効は「できれば使わない」ではなく、運用上の前提になる。
特にクライアント証明書(VPN、無線、端末認証など)を使う場合、失効が効かないと「退職者の証明書がずっと使える」状態になりやすい。
ここで重要なのは次。
openssl x509 -in server.crt -noout -text
見るポイント(出力内)
openssl x509 -in server.crt -noout -ocsp_uri
openssl ocsp -issuer issuer.crt -cert server.crt -url http://ocsp.example/ -CAfile chain.crt
openssl verify -crl_check -CAfile chain.crt -CRLfile ca.crl server.crt
certutil -url server.cer
certutil -verify server.cer
※ 実際のファイル形式やチェーン構成は環境に合わせる。ここでは「何を見ればよいか」を優先している。