NET::ERR_CERT_REVOKEDエラーの修正方法(サーバー・クライアント側)

intermediate🔒 SSL/TLS2026-04-26| Webブラウザ (Chrome, Edge, Brave), Windows, macOS, Linux, Nginx, Apache

Error Message

NET::ERR_CERT_REVOKED
#ssl#tls#セキュリティ#devops#chrome#nginx

NET::ERR_CERT_REVOKEDエラーとは何ですか?

ほとんどのSSLエラーは証明書の期限切れによって発生しますが、NET::ERR_CERT_REVOKEDエラーは異なり、より深刻なものです。これは、認証局(CA)が予定されていた有効期限よりも前に、その証明書を能動的に失効(キャンセル)させたことを意味します。盗難届が出されたクレジットカードのようなものだと考えてください。銀行(CA)が加盟店(ブラウザ)に対して、そのカードをもう受け付けないよう指示している状態です。

ChromeやEdgeなどのブラウザは、このエラーに対して厳格です。データの盗難を防ぐため、接続を完全にブロックします。CAが証明書を失効させた場合、通常はそのサイトのセキュリティがもはや保証されていないことを意味します。

証明書が失効する理由

  • 秘密鍵の漏洩: これは最も一般的な理由です。秘密鍵が誤って公開GitHubリポジトリにアップロードされたり、サーバーへの侵入によって流出したりした場合、所有者は直ちに証明書を失効させなければなりません。
  • ドメイン所有権の変更: ドメインを売却した場合、旧所有者がトラフィックを傍受するのを防ぐために、CAが古い証明書を失効させることがあります。
  • 不適切な発行: CAが誤った人物に証明書を発行した、あるいは業界標準に従っていなかったことに後から気づく場合があります。例えば2020年には、Let's Encryptが検証コードのバグにより数百万枚の証明書を失効させる必要がありました。
  • DNSおよびOCSPの失敗: ローカルネットワークの問題により、ブラウザがOnline Certificate Status Protocol(OCSP)サーバーに到達できないことがあります。ブラウザがステータスを確認できない場合、デフォルトで失効エラーとして処理されることがあります。

ウェブサイトの所有者および管理者向けの解決策

サイトでこのエラーが表示されている場合、訪問者には重大なセキュリティ警告が表示されています。クライアント側での一時しのぎでは解決できません。サーバー側で証明書を差し替える必要があります。

1. 証明書の強制更新

最も早い解決策は、新しい証明書を生成することです。Let's Encryptを使用している場合は、自動更新を待たずに、Certbotを使用して今すぐ強制的に更新してください:

sudo certbot renew --force-renewal

DigiCertやNamecheapなどの商用プロバイダーの場合は、ダッシュボードから証明書を「再発行(Reissue)」する必要があります。このプロセスには、新しい証明書署名要求(CSR)が必要です。

# Create a fresh 2048-bit RSA key and CSR
openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr

2. サーバー設定の更新

新しいファイルを受け取ったら、Webサーバーの設定を新しい .crt および .key ファイルに向けるように変更します。パスの更新を忘れるのはよくあるミスであり、失効した古い証明書が有効なままになってしまいます。

Nginxの設定:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

サービスをリロードして変更を適用します:

sudo systemctl reload nginx

ユーザーおよび開発者向けの解決策

GoogleやAmazonのような大手サイトでこのエラーが表示される場合、問題はユーザー側にある可能性が高いです。以下の手順を試して、ローカルの競合を解消してください。

1. システム時計の修正

暗号化はタイムスタンプに大きく依存しています。コンピューターの時刻が2015年や2030年になっていると、証明書の失効ステータスの検証に失敗します。わずか5分のずれでも問題が発生することがあります。

  • Windows: タスクバーの時計を右クリック > 日付と時刻の調整 > 今すぐ同期。
  • macOS: システム設定 > 一般 > 日付と時刻 > 「日付と時刻を自動的に設定」を切り替える。

2. SSLキャッシュの消去

Windowsは証明書情報をローカルキャッシュに保存します。証明書が失効した後に修正された場合でも、OSが古いステータスを参照し続けていることがあります。SSL状態をクリアすることで、強制的に最新の状態を確認させることができます。

  • スタートメニューで インターネット オプション を検索します。
  • コンテンツ タブを選択します。
  • SSL 状態のクリア をクリックします。
  • ChromeまたはEdgeを再起動し、サイトに再度アクセスしてください。

3. ネットワーク設定のリセット

DNS設定の破損により、マシンが証明書失効リスト(CRL)サーバーと通信できなくなることがあります。ネットワークスタックをリセットすることで、多くの場合この問題が解決します。

# Windows (Run Command Prompt as Admin)
ipconfig /flushdns
netsh winsock reset

# macOS
sudo killall -HUP mDNSResponder

修正を確認する方法

単にページを更新するだけでは不十分です。ブラウザはエラーをキャッシュすることで知られています。ターミナルやサードパーティ製のツールを使用して、サーバーが実際に何を送信しているかを確認してください。

OpenSSLで確認する

以下のコマンドを実行して、サーバーから生の証明書の詳細を確認します:

openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

Verify return code: 0 (ok) という行を探してください。それ以外のメッセージが表示される場合は、サーバーが依然として無効な証明書を使用しています。

SSL Labsを使用する

Qualys SSL Labs ツールは業界標準のツールです。URLを入力してスキャンを待ちます。「Revocation status」の行を確認してください。ここが明示的に「Good (not revoked)」となっている必要があります。

未然に防ぐためのヒント

  • OCSPステープリングを有効にする: これにより、サーバーがユーザーの代わりに失効確認を行えるようになります。サイトの高速化につながるほか、CAのサーバーに到達できない場合にブラウザでエラーが発生するのを防ぐことができます。
  • パーミッションを制限する: 秘密鍵のパーミッションを chmod 600 に設定してください。このファイルを参照できるのは、rootユーザーまたはWebサーバーのプロセスのみにする必要があります。
  • モニタリングを活用する: UptimeRobotなどのツールを使用して、SSLの状態を監視します。証明書が失効したり期限が切れたりした瞬間にアラートを受け取ることができ、ユーザーが気づく前に対処が可能になります。

Related Error Notes