數碼證書撤銷清單檢查會告訴你,憑證授權機構(CA)是否已在證書原定到期之前將其撤銷。你可以從證書中列出的分發點下載 CRL,在其中搜尋該證書的序號,或直接使用 OpenSSL 的 verify -crl_check 指令。瀏覽器和作業系統會在 TLS 交握期間自動處理這項檢查,但任何管理公鑰基礎設施(PKI)或核驗文件簽署證書的人,都應該理解手動檢查的步驟。本指南會說明 CRL 是甚麼、為甚麼撤銷檢查很重要、如何用 OpenSSL 及其他工具執行檢查,以及 CRL 與 OCSP 的比較——讓你可以判斷哪種方法最適合自己的工作流。在任何檢查結果被用於生產環境之前,請務必對照最新版 RFC 5280、CA 政策及廠商文件確認細節。
甚麼是憑證撤銷清單(CRL)?
憑證撤銷清單(CRL)是由 CA 簽發並發布的、帶有簽名和時間戳的文件,用以公告哪些數碼證書已在到期日期之前被撤銷。CRL 在 RFC 5280 中定義,內容包含簽發者名稱、清單生成日期(「this update」)、下一份清單的預計發布日期(「next update」),以及被撤銷證書序號的清單——每個序號都附有撤銷日期和一個可選原因代碼,例如金鑰外洩、CA 遭入侵或停止營運。
CA 撤銷證書的原因有多種:私鑰已遭外洩、證書被誤發、訂戶已停止營運,或證書正被新證書取代。如果沒有渠道得知這些撤銷資訊,依賴方就會繼續信任一張證書直到它到期——即使 CA 早已宣告它不可信。
有幾個實務細節值得留意:
- 基礎 CRL(base CRL)列出 CA 已知的全部被撤銷證書;增量 CRL(delta CRL)只列出相對上一份基礎 CRL 的變化,藉此降低頻寬與解析開銷。
- CRL 由簽發它的 CA 簽名,因此其完整性可以被獨立核驗。
- 用戶端通常會把 CRL 快取至其「next update」時間,之後再下載新副本。
CRL 只是 PKI 撤銷機制的其中一半,OCSP 提供另一半。兩者回答同一個問題:這張證書此刻是否仍然可信?想更全面了解簽發證書並發布 CRL 的機構,請參閱我們的面向瀏覽器與電子簽署的憑證授權機構清單。
為甚麼需要檢查證書撤銷狀態
檢查撤銷狀態,就是「證書看起來有效」與「證書確實有效」這兩種信任之間的分別。一張證書可以通過基本的信任鏈檢查——簽發者正確、日期在有效期內、簽名無誤——但仍然已被撤銷。如果你跳過撤銷檢查,就等同把所有尚未到期的證書都視為有效,這會令撤銷機制的存在完全失去意義。
撤銷檢查最常見的關鍵場景包括:
- 金鑰外洩。 攻擊者一旦取得私鑰,CA 便會撤銷對應的證書,讓依賴方停止接受它。若不做撤銷檢查,你就會繼續信任用被盜私鑰作出的簽名。
- CA 誤發。 CA 可能發現某張證書發給了錯誤的實體,或包含錯誤的屬性。撤銷就是 CA 事後撤回該證書的手段。
- 停止營運。 公司倒閉或網域易主時,綁定在舊實體上的證書應被撤銷,以免被他人重用。
- 文件與電子簽署核驗。 經數碼簽署的 PDF 內嵌一張證書。如果該證書在簽署之前(或在簽署與核驗之間)被撤銷,簽名的可信度便會改變。想深入了解更完整的核驗工作流,請閱讀我們關於如何核驗商業數碼簽名的指南。
一個容易忽略的細節:被撤銷的證書不等於已到期的證書。到期是自動的、基於日期的;撤銷則是 CA 的主動行為。因此只檢查到期與否並不足夠。關於證書生命周期的背景,可參閱我們關於數碼證書會否到期的文章。
如何對照 CRL 檢查證書
具體步驟因你所用的工具而異,但工作流是一致的:在證書中找出 CRL 分發點(CDP),下載 CRL,然後搜尋該證書的序號。
第 1 步:找出 CRL 分發點。 每張支援 CRL 檢查的證書都帶有 CRL Distribution Points 延伸項目,內含一個或多個 URL。用 OpenSSL 提取:
```
openssl x509 -in certificate.pem -noout -text | grep -A 4 "CRL Distribution"
```
第 2 步:下載 CRL。 用 curl 或 wget 從你找到的 URL 取得 CRL。CRL 通常以 DER 格式分發:
```
curl -o crl.der http://crl.example.com/intermediate.crl
```
第 3 步:查看 CRL 內容。 轉換並檢視 CRL,查看其簽發者、更新時間與被撤銷的序號:
```
openssl crl -in crl.der -inform DER -text -noout
```
第 4 步:對照 CRL 核驗證書。 把 CA 證書與 CRL 合併成一個檔案,然後以 -crl_check 參數執行 OpenSSL 的 verify 指令:
```
cat ca.crt crl.pem > ca-crl.pem
openssl verify -crl_check -CAfile ca-crl.pem certificate.pem
```
如果證書的序號出現在 CRL 中,OpenSSL 會回報撤銷錯誤。如果 CRL 已過期(超過其「next update」時間)或無法存取,檢查便會失敗——這是安全的預設行為。
瀏覽器與作業系統層面的檢查。 主流瀏覽器會在 TLS 期間自動執行撤銷檢查,不過現時許多瀏覽器依賴 OCSP 或專屬的更新機制,而非下載完整的 CRL。在 Windows 上,certutil -dump crl.crl 可顯示 CRL 內容,雙擊 .crl 檔案則會開啟系統內建的檢視器。如果你想在瀏覽器環境中信任一張證書之前先核驗它,請參閱我們關於如何檢查數碼證書的指南。
CRL 與 OCSP:如何選擇撤銷檢查方法
CRL 和 OCSP(線上證書狀態協定,RFC 6960)回答的都是「這張證書被撤銷了嗎?」CRL 是拉取式的批次模型:用戶端下載一份清單並在本地搜尋。OCSP 是查詢式的即時模型:用戶端向回應器查詢單張證書的狀態,得到的答案為有效、已撤銷或未知。
大多數現代瀏覽器傾向使用 OCSP(或 OCSP stapling)進行即時網頁檢查,而企業 PKI 團隊在內部 CA 部署中往往依賴 CRL——在那些環境中,未必保證能連上 OCSP 回應器。兩者是互補而非互斥的,許多用戶端會同時使用。如果你正在排查一個無法通過核驗的簽名,撤銷檢查方法是最先應核查的事項之一;我們關於數碼簽名為何無效的文章逐一分析了常見成因。
至於長期簽名核驗——即多年之後仍需證明簽名在簽署當時是有效的——撤銷數據必須與簽名一併歸檔。我們的如何確保數碼簽名的長期有效性(LTV)指南涵蓋了該場景的 LTV 檢查清單。
Nota Sign:當你的簽署平台追蹤證書狀態時
手動執行一次 CRL 或 OCSP 檢查,一次只能回答一個問題。在生產環境的簽署中,你需要的是一個把證書狀態感知整合進簽署事件本身的平台,這樣審計追蹤便會記錄簽署當刻證書的效力狀態。Nota Sign——法大大(FaDaDa)旗下的全球電子簽署平台——正是圍繞這個理念構建:每一份已簽署文件都帶有與證書有效性綁定的防篡改記錄。
它的市場成績是公開的——在 IDC 中國電子簽署市場排行中,Nota Sign 已連續多年位列第一。由於撤銷與數據駐留義務因 CA 政策和司法管轄區而異,請先對照自身需求確認細節。方案按工作流計價,而不是看人數,簽署量增長不會抬高帳單。讓 Nota Sign 帶你走一遍生產環境下的 CRL/OCSP 檢查——聯絡 Nota Sign 團隊。









