最終更新日: | すべてのドキュメントを見る
証明書が安全に使用できなくなった場合は、失効させる必要があります。これは、いくつかの理由で発生する可能性があります。たとえば、秘密鍵を誤って公開ウェブサイトで共有してしまう、ハッカーがサーバーから秘密鍵をコピーする、ハッカーがサーバーまたはDNS構成を一時的に制御して、秘密鍵を保持している証明書の検証と発行に使用するなどです。
Let's Encrypt証明書を失効させると、Let's Encryptはオンライン証明書ステータスプロトコル (OCSP)を通じてその失効情報を公開し、一部のブラウザはOCSPをチェックして証明書を信頼すべきかどうかを確認します。OCSPには根本的な問題があるため、すべてのブラウザがこのチェックを行うわけではないことに注意してください。それでも、侵害された秘密鍵に対応する証明書を失効させることは重要な慣行であり、Let's Encryptの加入者契約で義務付けられています。
Let's Encryptで証明書を失効させるには、ACME APIを使用します。ほとんどの場合、CertbotなどのACMEクライアントを介して使用します。証明書を失効させる権限があることをLet's Encryptに証明する必要があります。これを行うには、証明書を発行したアカウントから、別の承認されたアカウントを使用するか、証明書の秘密鍵を使用するという3つの方法があります。
理由コードの指定
証明書を失効させる場合、Let's Encryptの加入者は次のように理由コードを選択する必要があります。
- 理由が提供されていない、または`unspecified` (RFC 5280 CRLReason #0)
- 以下の理由コードが失効リクエストに適用されない場合、加入者は「unspecified」以外の理由コードを提供してはなりません。
- `keyCompromise` (RFC 5280 CRLReason #1)
- 証明書の加入者は、証明書の秘密鍵が侵害されたと考える理由がある場合、たとえば、権限のない人物が証明書の秘密鍵にアクセスした場合、「keyCompromise」の失効理由を選択する必要があります。
- 失効リクエストが加入者アカウントの秘密鍵ではなく、証明書の秘密鍵を使用して署名されている場合、Let's Encryptはリクエストの失効理由を無視し、理由を「keyCompromise」に設定する場合があります。
- `superseded` (RFC 5280 CRLReason #4)
- 証明書の加入者は、既存の証明書を置き換える新しい証明書をリクエストする場合、「superseded」の失効理由を選択する必要があります。
- `cessationOfOperation` (RFC 5280 CRLReason #5)
- 証明書の加入者は、証明書に含まれるすべてのドメイン名を所有しなくなった場合、またはウェブサイトを廃止するため証明書を使用しなくなった場合、「cessationOfOperation」の失効理由を選択する必要があります。
- 失効リクエストが、問題の証明書を注文しなかったが、証明書のすべての識別子に対する制御を実証している加入者アカウントからのものである場合、Let's Encryptはリクエストの失効理由を無視し、理由を「cessationOfOperation」に設定する場合があります。
上記以外の理由コードを指定した失効リクエストは拒否されます。
証明書を発行したアカウントから
元々証明書を発行し、発行に使用したアカウントをまだ制御している場合は、アカウントの資格情報を使用して証明書を失効させることができます。Certbotはデフォルトでこれを試みます。例:
certbot revoke --cert-path /etc/letsencrypt/archive/${YOUR_DOMAIN}/cert1.pem
別の承認済みアカウントの使用
誰かがホストまたはDNSを侵害した後に証明書を発行した場合、制御を取り戻したらその証明書を失効させる必要があります。証明書を失効させるために、Let's Encryptは、その証明書に含まれるドメイン名を制御していることを確認する必要があります(そうでない場合、人々は許可なく互いの証明書を失効させる可能性があります)。
この制御を検証するために、Let's Encryptは発行の制御の検証に使用するのと同じ方法を使用します。DNS TXTレコードに値を配置するか、HTTPサーバーにファイルを配置することができます。一般的に、ACMEクライアントはこれらを処理します。ほとんどのACMEクライアントは検証と発行を組み合わせているため、検証をリクエストする唯一の方法は発行を試みることです。必要ない場合は、結果の証明書を失効させるか、単に秘密鍵を破棄することができます。
証明書の発行をまったく回避したい場合は、コマンドラインに存在しないドメイン名を含めることができます。これにより、他の既存のドメイン名を検証しながら発行が失敗します。例:
certbot certonly --manual --preferred-challenges=dns -d ${YOUR_DOMAIN} -d nonexistent.${YOUR_DOMAIN}
そして指示に従ってください。DNSではなくHTTPを使用して検証する場合は、`--preferred-challenges`フラグを`--preferred-challenges=http`に置き換えます。
失効させたい証明書のすべてのドメイン名の制御を検証したら、crt.shから証明書をダウンロードし、発行した場合と同様に証明書を失効させることができます。
certbot revoke --cert-path /PATH/TO/downloaded-cert.pem
証明書の秘密鍵の使用
元々証明書を発行しなかったが、対応する秘密鍵のコピーを持っている場合は、その秘密鍵を使用して失効リクエストに署名することで失効させることができます。たとえば、秘密鍵が誤って公開されていることがわかった場合、この方法を使用して、元々これらの証明書を発行した人でなくても、その秘密鍵を使用した証明書を失効させることができます。
この方法を使用するには、まずPEM形式の秘密鍵のコピーが必要です。
次に、まだ持っていない場合は、失効させる証明書をダウンロードします。Let's Encryptはすべての証明書をCertificate Transparencyログに記録するため、crt.shなどのログモニターから証明書を見つけてダウンロードできます。一致する`SubjectPublicKeyInfo` (SPKI)フィールドを検索すると、秘密鍵を使用するすべての証明書が見つかります。秘密鍵からSPKIハッシュを抽出するには:
openssl pkey -outform DER -in /PATH/TO/privkey.pem -pubout | openssl sha256
秘密鍵と証明書を取得したら、次のように証明書を失効させることができます。
certbot revoke --cert-path /PATH/TO/cert.pem --key-path /PATH/TO/privkey.pem --reason keyCompromise