すべての SSL 記事 SSL と証明書

証明書の失効:OCSP、CRL、証明書が侵害された場合の対応

証明書の失効とは、SSL証明書を有効期限前に無効化するプロセスです。通常、秘密鍵が侵害された場合、証明書が誤って発行された場合、またはドメインの所有権が変更された場合に行われます。

理論上、失効は認証局システムが緊急事態に対処する方法です。実際には、PKIインフラで最も弱い部分です。その理由と、代替として何が登場しているかを解説します。

証明書を失効させるべき場合

  • 秘密鍵の侵害 — 漏洩、盗難、露出(例:公開Gitリポジトリへのコミット)
  • 証明書の誤発行 — 認証局が自分が管理していないドメインの証明書を発行した
  • ドメインの売却 — 証明書がカバーするドメインをもう所有していない
  • 鍵のローテーション — 鍵を更新し、古い証明書を無効にしたい
  • サーバーの廃止 — 証明書がもう有効であるべきではない

失効の仕組み

CRL(Certificate Revocation List)

最初の失効メカニズムです。認証局がすべての失効した証明書のシリアル番号のリストを公開します。ブラウザはリストをダウンロードして照合します。

問題点:

  • CRLは時間とともに大きくなります(数百万エントリ)
  • ブラウザは証明書を検証する前にリスト全体をダウンロードする必要があります
  • 遅くて帯域を消費するため、ほとんどのブラウザは何年も前にCRLの確認を停止しました

OCSP(Online Certificate Status Protocol)

リアルタイムチェックです。リストをダウンロードする代わりに、ブラウザが認証局のOCSPサーバーに「この証明書は失効していますか?」と尋ねます。

仕組み:

ブラウザ → OCSPレスポンダー: 「シリアル番号#12345の証明書はまだ有効ですか?」
OCSPレスポンダー → ブラウザ: 「Good」 / 「Revoked」 / 「Unknown」

問題点:

  • プライバシー — 認証局がどのサイトを訪問しているか知ることができます(すべてのOCSPリクエストが見えます)
  • 遅延 — すべての新しいHTTPS接続にネットワークラウンドトリップが追加されます
  • 可用性 — OCSPレスポンダーがダウンした場合、ブラウザは通常ソフトフェイルします(証明書を受け入れる)。これにより失効が無効になります

OCSPステープリング(改善版)

サーバーが定期的にOCSPレスポンスを取得し、TLSハンドシェイクに「ステープル」(添付)します。ブラウザは認証局に問い合わせることなく失効状態を取得できます。

メリット:

  • プライバシーの漏洩なし(ブラウザは認証局に接続しない)
  • 追加の遅延なし(レスポンスがハンドシェイクにバンドル)
  • 認証局のOCSPサーバーが遅い、またはダウンしていても動作

設定:

Nginx:

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

Apache:

SSLUseStapling on
SSLStaplingCache "shmcb:/var/run/apache2/ssl_stapling(128000)"

CRLite(将来)

MozillaのCRLiteは、すべての既知の失効をコンパクトなフィルター(約1.5 MB)に圧縮し、Firefoxの更新に同梱します。ブラウザはローカルで失効状態を確認できます。ネットワークリクエスト不要、プライバシー漏洩なし、遅延なし。2026年時点でCRLiteはFirefoxで有効であり、他のブラウザに採用される可能性があります。

失効についての厳しい現実

失効は実際にはほとんど機能していません:

  • Chromeはデフォルトでは OCSPもCRLも確認しません(独自のCRLSets — 厳選されたサブセットに依存)
  • SafariはOCSPを確認しますがソフトフェイルします(OCSPサーバーに到達できない場合、証明書を受け入れます)
  • FirefoxはCRLiteを使用しています(最良のアプローチですが、Firefox限定)
  • OCSPのソフトフェイルは、決定的な攻撃者がOCSPチェックをブロックでき、ブラウザが失効した証明書を受け入れることを意味します

これが業界が短命証明書を主要な防御として移行している理由です:

アプローチ保護方法
失効(OCSP/CRL)侵害された証明書を無効化 — ただし確認は信頼できない
短い有効期間(90日 → 47日侵害された証明書がすぐに有効期限切れ — 確認不要

証明書の有効期間が47日しかない場合、盗まれた鍵は最大47日しか使えません。失効が機能しない場合でも被害を限定できます。

Let’s Encrypt証明書を失効させる方法

秘密鍵が侵害された場合:

# Certbotの場合
sudo certbot revoke --cert-path /etc/letsencrypt/live/yourdomain.com/cert.pem --reason keycompromise

# acme.shの場合
acme.sh --revoke -d yourdomain.com

失効後、すぐに新しい証明書を取得してください。失効は問題を修正するものではなく、古い証明書を無効にするだけです。GetHTTPSを使用して、新しい鍵ペアで新しい証明書を発行してください。

よくある質問

OCSPステープリングを有効にすべきですか?

はい。失効チェックを保証するものではありません(ブラウザが無視する場合があります)が、プラスの効果があります:TLSハンドシェイクの高速化(クライアント側のOCSP検索不要)、プライバシーの向上(ブラウザが認証局に接続しない)、一部のブラウザはステープルされたOCSPレスポンスを尊重します。有効化は無料です。NginxApacheで2〜3行の設定で対応できます。

失効はどれくらい早く有効になりますか?

CRLは定期的に公開されます(数時間〜数日)。OCSPレスポンスはキャッシュされます(通常1〜4時間)。実際には、失効した証明書が一部のブラウザで最大24時間「有効」のままになることがあります。これも短命証明書が失効に代わる主要な防御となっている理由の1つです。

更新時に失効は必要ですか?

いいえ。新しい証明書を取得するのに、古い証明書を失効させる必要はありません。古い証明書は単に有効期限が切れるだけです。失効は秘密鍵が侵害された場合にのみ必要です。定期的な更新では不要です。

証明書が失効しているか確認できますか?

# OCSPステータスを確認
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -status 2>/dev/null | grep "OCSP Response Status"
# "successful" = OCSPステープリングが動作中
# 空の場合、ステープリングは有効になっていません

またはcrt.shで確認できます。失効した証明書はインターフェースでマークされます。

関連記事

SSL と証明書 2026-05-07
証明書チェーンの仕組み
ブラウザがルートCAから中間CAを経てあなたの証明書までの証明書チェーンを通じてSSL証明書を検証する仕組みを解説。チェーンの順序の重要性と「証明書が信頼されていない」エラーの修正方法も紹介します。
SSL と証明書 2026-05-07
SSL証明書の有効期間:47日間への変更の解説
CA/Browser Forumは2029年までにSSL証明書の有効期間を47日間に短縮することを決議しました。タイムライン、あなたのWebサイトへの影響、準備方法を解説します。
SSL と証明書 2026-05-07
認証局(CA)とは?
認証局はSSL証明書に署名してWebサイトのIDを証明します。CAの仕組み、信頼モデル、主要なCA、Let's Encryptが業界を変えた理由を解説します。
デプロイ 2026-05-08
NginxにSSL証明書をインストールする方法
NginxにSSL証明書をインストールするステップバイステップガイド。ファイルアップロード、完全なサーバーブロック設定、TLSベストプラクティス、HTTP/2、HSTS、リダイレクト設定、テスト、6つの一般的なエラーのトラブルシューティングを解説します。
ブラウザで無料 SSL 証明書を取得
インストール不要、アカウント不要。秘密鍵は常にデバイスに残ります。
証明書を取得