上次更新時間: | 檢視所有文件
當憑證不再安全使用時,您應該撤銷它。發生這種情況的原因有幾種。例如,您可能會不小心在公開網站上分享私鑰;駭客可能會從您的伺服器複製私鑰;或者駭客可能會暫時控制您的伺服器或 DNS 設定,並利用它來驗證和發行他們持有私鑰的憑證。
當您撤銷 Let's Encrypt 憑證時,Let's Encrypt 會透過線上憑證狀態協定 (OCSP) 發佈該撤銷資訊,並且某些瀏覽器會檢查 OCSP 以查看是否應信任憑證。請注意,OCSP 有一些根本問題,因此並非所有瀏覽器都會執行此檢查。儘管如此,撤銷與遭洩漏的私鑰相對應的憑證是一項重要的實踐,並且是 Let's Encrypt 的用戶協議所要求的。
若要使用 Let's Encrypt 撤銷憑證,您將使用 ACME API,最有可能透過像 Certbot 這樣的 ACME 用戶端。您需要向 Let's Encrypt 證明您有權撤銷該憑證。有三種方法可以做到這一點:從發行憑證的帳戶、使用不同的授權帳戶,或使用憑證私鑰。
指定原因代碼
在撤銷憑證時,Let's Encrypt 的訂閱者應按如下方式選擇原因代碼
- 未提供原因或
unspecified
(RFC 5280 CRLReason #0)- 當以下原因代碼不適用於撤銷請求時,訂閱者不得提供「未指定」以外的原因代碼。
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}
並按照指示操作。如果您希望使用 HTTP 而不是 DNS 來進行驗證,請將 --preferred-challenges
旗標替換為 --preferred-challenges=http
。
在您驗證了對您要撤銷憑證中的所有網域名稱的控制權之後,您可以從crt.sh下載憑證,然後繼續撤銷憑證,就像您發行了它一樣
certbot revoke --cert-path /PATH/TO/downloaded-cert.pem
使用憑證私鑰
如果您最初沒有發行憑證,但您有對應私鑰的副本,則可以使用該私鑰簽署撤銷請求來撤銷憑證。例如,如果您看到私鑰意外公開,則可以使用此方法來撤銷使用該私鑰的憑證,即使您不是最初發行這些憑證的人。
若要使用此方法,您首先需要一份 PEM 格式的私鑰副本。
然後,如果您還沒有,請下載要撤銷的憑證。Let's Encrypt 會將所有憑證記錄到憑證透明度日誌中,因此您可以從像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