2026年8月7日

2026年8月7日

Let’s Encrypt証明書を失効(revoke)する方法:Certbotの手順と失効前に確認すること

Let's Encrypt の証明書は、Certbot なら certbot revoke コマンドで失効させられます。ただし、失効した証明書はその時点からブラウザに拒否される可能性があるため、「新しい証明書に差し替えてから失効させる」順番が重要です。この記事では、失効が必要な場面と不要な場面の見分け方、Certbot での具体的な手順、秘密鍵の漏えい時の対応、失効できたかの確認方法を説明します。

失効が必要な場面・不要な場面

失効(revocation)は、有効期限前の証明書を「もう信用しないでほしい」と認証局に届け出る手続きです。次のような場面で使います。

  • 秘密鍵が漏えいした、または漏えいした疑いがある: サーバーの侵害、秘密鍵を誤って公開リポジトリに含めた、退職者が鍵を持ち出した、などです。最も優先度の高い理由です。
  • ドメインを手放した: 売却や契約終了でドメインの管理者が変わった場合、手元に残る証明書は不要になります。
  • 証明書に誤ったホスト名が含まれていた: 本来入れるべきでないホスト名を含めて発行してしまった場合です。

一方、次の場面では失効は不要です。

  • 証明書を更新したいだけ: 新しい証明書を取得して差し替えれば足ります。古い証明書は期限が来れば自然に無効になります。
  • サーバーを移転した: 同じドメインなら移転先で新たに取得すれば済みます。秘密鍵を安全に破棄できているなら、旧証明書を失効させる必要は通常ありません。
  • サイトを閉鎖した: 秘密鍵の漏えいがなければ、期限切れを待つ方法でも問題はありません。

失効は取り消せない操作です。必要かどうか迷ったら、まず秘密鍵が第三者の手に渡った可能性があるかを基準に判断します。

手順1:対象の証明書を特定する

サーバーにある証明書の一覧を確認します。

sudo certbot certificates

Certificate Name と、含まれるホスト名(Domains)、有効期限、ファイルのパスが表示されます。同じドメインで複数の証明書(example.com と example.com-0001 など)があることも多いため、現在Webサーバーが読み込んでいるのはどれかを、nginx や Apache の設定ファイルの ssl_certificate / SSLCertificateFile で確かめます。

手順2:新しい証明書に差し替える

使用中の証明書を失効させる場合は、先に新しい証明書を用意して切り替えます。順番を逆にすると、新しい証明書が届くまでの間、サイトが証明書エラーで閲覧できなくなるおそれがあります。

秘密鍵の漏えいが理由の場合は、新しい証明書で秘密鍵も作り直します。Certbot は --reuse-key を指定していなければ更新のたびに新しい鍵を生成しますが、設定ファイルで鍵の再利用を有効にしていないかを念のため確認してください。

# 鍵の再利用設定がないことを確認
sudo grep -i reuse_key /etc/letsencrypt/renewal/example.com.conf

# 新しい鍵で強制的に再取得し、Webサーバーを再読み込み
sudo certbot renew --cert-name example.com --force-renewal
sudo systemctl reload nginx

再読み込みの後、ブラウザや次のコマンドで新しい証明書が配信されているかを確認します。有効期限やシリアル番号が変わっていれば差し替え完了です。

openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -serial -enddate

手順3:古い証明書を失効させる

差し替えが済んだら、古い証明書を失効させます。Certbot の管理下にある証明書なら、証明書名を指定できます。ただし手順2で強制更新をした場合、live/ 配下のファイルは新しい証明書を指すため、古い証明書は archive/ 配下のファイルを直接指定します。

# live/ のリンク先が現在の証明書。それ以外の番号が過去の証明書
sudo ls -l /etc/letsencrypt/live/example.com/
sudo ls -l /etc/letsencrypt/archive/example.com/

# 古い証明書を指定して失効
sudo certbot revoke \
  --cert-path /etc/letsencrypt/archive/example.com/cert1.pem \
  --reason superseded \
  --no-delete-after-revoke

--reason には失効理由を指定します。Certbot で指定できるのは unspecified、keycompromise、affiliationchanged、superseded、cessationofoperation です。差し替えた場合は superseded、ドメインを手放した場合は cessationofoperation が当てはまります。

--no-delete-after-revoke は、失効後に証明書の設定を削除しないための指定です。手順2で同じ証明書名のまま新しい証明書へ更新している場合、ここで削除を選ぶと新しい証明書の設定まで消えてしまいます。ドメイン自体を手放すなど、その証明書名が今後不要な場合だけ削除を選びます。指定しない場合は削除するかを対話形式で尋ねられます。

秘密鍵が漏えいした場合

秘密鍵の漏えいを理由に失効させる場合は、keycompromise を指定し、漏えいした鍵で失効要求に署名します。

sudo certbot revoke \
  --cert-path /etc/letsencrypt/archive/example.com/cert1.pem \
  --key-path /etc/letsencrypt/archive/example.com/privkey1.pem \
  --reason keycompromise \
  --no-delete-after-revoke

Let's Encrypt は、鍵の漏えいを理由とする失効では、その鍵を以後の発行に使えないようにする扱いをしています。また、keycompromise を理由にする場合は、アカウント鍵ではなく証明書の秘密鍵による署名を求める運用になっています。細かな条件は変わることがあるため、作業前に Let's Encrypt の公式ドキュメント「Revoking Certificates」を確認してください(2026年10月現在)。

発行したアカウントが手元にない場合

前任者が別のサーバーで取得した証明書など、発行時のACMEアカウントが分からない場合でも、次のいずれかの方法で失効を申請できます。

  • 証明書の秘密鍵を持っている: 上記の --key-path を使う方法で失効できます。
  • ドメインの管理権限を持っている: ACMEの仕様では、証明書に含まれるすべてのホスト名について自分のアカウントで認証を済ませていれば(たとえば同じホスト名で証明書を一度取得する)、そのアカウントから失効を申請できます。秘密鍵がない場合の手段ですが、手順はクライアントによって異なるため、使用するクライアントのドキュメントを確認してください。

対象の証明書ファイルが手元にない場合は、Certificate Transparency のログを検索できる crt.sh などのサービスで、そのドメインに発行された証明書を探してダウンロードできます。

Certbot 以外を使っている場合

acme.sh には --revoke オプションがあり、ドメイン名を指定して失効できます。レンタルサーバーやホスティング会社の無料SSL機能で取得した証明書は、利用者側でACMEの操作ができないことが多いため、管理画面の機能か、提供元のサポート窓口に依頼します。

失効できたかを確認する

Let's Encrypt は2025年にOCSP(証明書の状態を問い合わせる仕組み)の提供を終了し、失効情報はCRL(失効リスト)で公開する方式に移行しています(2026年10月現在)。そのため、openssl ocsp による確認は Let's Encrypt の証明書には使えません。CRLで確認する場合は次のように進めます。

# 証明書のシリアル番号とCRLの配布URLを確認
openssl x509 -in cert1.pem -noout -serial
openssl x509 -in cert1.pem -noout -ext crlDistributionPoints

# 表示されたURLからCRLを取得し、シリアル番号を検索
curl -s -o le.crl "表示されたCRLのURL"
openssl crl -inform DER -in le.crl -noout -text | grep -i "シリアル番号"

CRLは一定間隔で更新されるため、失効直後は載っていないことがあります。時間をおいて確認してください。古い証明書にはCRLの配布URLが含まれていない場合もあり、その場合は crt.sh の表示などで状態を確認します。

なお、ブラウザが失効情報をどう扱うかはブラウザごとに異なり、失効した証明書がすぐにすべての環境で拒否されるとは限りません。秘密鍵が漏えいした場合は、失効だけに頼らず、鍵の差し替え、侵入経路の調査、関連するパスワードやAPIキーの変更をあわせて進めます。

まとめ

  • 失効が必要なのは、主に秘密鍵の漏えい、ドメインの手放し、誤発行のときです。更新や移転だけなら失効は不要です。
  • 使用中の証明書は、新しい証明書(鍵の漏えい時は新しい鍵)に差し替えてから失効させます。
  • Certbot では certbot revoke --cert-path と --reason を使い、新しい証明書の設定を消さないよう削除の選択に注意します。
  • Let's Encrypt はOCSPを終了しCRLへ移行しているため、失効の確認はCRLや crt.sh で行います。作業前には /etc/letsencrypt ディレクトリ全体のバックアップを取っておきます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲