所有 SSL 文章 SSL 與憑證

證書吊銷:OCSP、CRL 以及證書被洩露後的處理方式

證書吊銷是指在 SSL 證書到期之前使其失效的過程——通常是因為私鑰洩露、證書被錯誤簽發,或域名所有權發生變更。

理論上,吊銷是 CA 體系應對緊急情況的方式。但實際上,它是 PKI 基礎設施中最薄弱的環節。以下是原因,以及正在替代它的方案。

何時需要吊銷證書

  • 私鑰洩露 —— 金鑰被洩露、竊取或暴露(例如提交到公開的 Git 倉庫)
  • 證書錯誤簽發 —— CA 為你不控制的域名簽發了證書
  • 域名轉讓 —— 你不再擁有證書所覆蓋的域名
  • 金鑰輪換 —— 你正在輪換金鑰並希望廢棄舊證書
  • 伺服器退役 —— 證書不應再有效

吊銷的工作原理

CRL(證書吊銷列表)

這是最早的吊銷機制。CA 釋出所有已吊銷證書序列號的列表,瀏覽器下載該列表並進行比對。

問題:

  • CRL 會隨時間增長變得非常大(數百萬條記錄)
  • 瀏覽器必須在驗證證書之前下載整個列表
  • 速度慢且消耗頻寬——大多數瀏覽器多年前就已停止檢查 CRL

OCSP(線上證書狀態協議)

實時查詢機制。瀏覽器不再下載列表,而是向 CA 的 OCSP 伺服器詢問:“這個證書是否被吊銷了?”

工作流程:

Browser → OCSP Responder: "Is cert serial #12345 still valid?"
OCSP Responder → Browser: "Good" / "Revoked" / "Unknown"

問題:

  • 隱私 —— CA 能知道你正在訪問哪些網站(它們能看到每個 OCSP 請求)
  • 延遲 —— 每個新的 HTTPS 連線都增加一次網路往返
  • 可用性 —— 如果 OCSP 響應器宕機,瀏覽器通常會軟失敗(仍然接受證書),導致吊銷機制形同虛設

OCSP Stapling(改進方案)

伺服器定期獲取 OCSP 響應並將其”裝訂”到 TLS 握手中。瀏覽器無需聯絡 CA 即可獲得吊銷狀態。

優勢:

  • 無隱私洩露(瀏覽器不會聯絡 CA)
  • 無額外延遲(響應與握手捆綁傳送)
  • 即使 CA 的 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 證書

如果你的私鑰洩露了:

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

# With acme.sh
acme.sh --revoke -d yourdomain.com

吊銷後,立即獲取新證書——吊銷不會修復問題,它只是使舊證書失效。使用 GetHTTPS 用新金鑰對簽發一份新證書。

常見問題

我應該啟用 OCSP Stapling 嗎?

應該。它不能保證吊銷檢查有效(瀏覽器可能忽略它),但整體上是有益的:更快的 TLS 握手(無需用戶端查詢 OCSP)、更好的隱私(瀏覽器不聯絡 CA),且部分瀏覽器確實會遵循裝訂的 OCSP 響應。啟用它沒有成本——NginxApache 只需 2-3 行配置即可支援。

吊銷多快生效?

CRL 定期釋出(數小時到數天)。OCSP 響應有快取(通常 1-4 小時)。實際上,已吊銷的證書可能對某些瀏覽器來說在長達 24 小時內仍然”有效”。這是短期證書正在取代吊銷成為主要防禦手段的又一原因。

續簽時需要吊銷舊證書嗎?

不需要。獲取新證書不需要吊銷舊證書。舊證書只會自然過期。只有在私鑰洩露時才需要吊銷——常規續簽不需要。

如何檢查證書是否已被吊銷?

# Check OCSP status
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -status 2>/dev/null | grep "OCSP Response Status"
# "successful" = OCSP stapling is working
# If empty, stapling is not enabled

或者檢視 crt.sh——已吊銷的證書會在介面中標註。

相關文章

SSL 與憑證 2026-05-07
證書信任鏈詳解
瀏覽器如何透過從根 CA 到中間 CA 再到你的證書的鏈條來驗證 SSL 證書。瞭解為什麼鏈順序很重要,以及如何修復'證書不受信任'錯誤。
SSL 與憑證 2026-05-07
SSL 證書有效期:47 天變更詳解
CA/Browser Forum 投票決定到 2029 年將 SSL 證書有效期縮短至 47 天。瞭解時間線、對你網站的影響,以及如何準備。
SSL 與憑證 2026-05-07
什麼是憑證授權機構(CA)?
憑證授權機構簽發 SSL 證書以證明網站身份。瞭解 CA 的工作原理、信任模型、主要 CA,以及 Let's Encrypt 如何改變了行業。
部署 2026-05-08
如何在 Nginx 上安裝 SSL 證書
在 Nginx 上安裝 SSL 證書的分步指南。涵蓋檔案上傳、完整 server 塊配置、TLS 最佳實踐、HTTP/2、HSTS、重新導向設定、測試以及 6 個常見錯誤的排查方法。
在瀏覽器中取得免費 SSL 憑證
無需安裝,無需帳號。私鑰始終留在你的裝置上。
取得憑證