憑證廢止清冊(Certificate Revocation List, CRL)是一份由憑證頒發機構 (CA) 定期發佈的清單,記錄已被撤銷且尚未過期的數位憑證,透過檢查 CRL 使用者可以確認某憑證是否仍有效,常用於驗證數位簽章的安全性與可靠性。
常見的憑證進入廢止清冊的原因,可能是憑證遺失、違反使用規定、憑證廢止等狀況。
CRL 與 OCSP
CRL(Certificate Revocation List)和 OCSP(Online Certificate Status Protocol)是兩種驗證數位憑證有效性的機制,用於確保使用者可以信任憑證持有者的身份。
CRL 是由憑證頒發機構 (CA) 定期發佈的清單,記錄所有已被撤銷但尚未過期的憑證序號。檢查憑證狀態時,使用者需下載整份清單並比對目標憑證,這在清單較大時可能造成延遲,尤其是在需要頻繁驗證的場景下。CRL 的優點是可以在離線環境下使用,適合需要確保可靠性的場景,但其缺點是清單可能會隨撤銷記錄的增加而變得龐大。
OCSP 則是一種更輕量化且即時的驗證方法。它允許應用程式直接向 CA 或 OCSP 伺服器查詢特定憑證的狀態,而無需下載整個撤銷清單。OCSP 提供快速響應,特別適合需要即時驗證的應用,例如線上交易或即時通訊。然而,OCSP 依賴伺服器的可用性,若伺服器不可用,驗證可能會延遲或失敗。此外,頻繁的查詢也可能增加伺服器的負擔。
兩者各有優勢,CRL 適合低頻率或離線驗證的需求,而 OCSP 更適合高頻率、即時性要求高的場景。實際應用中,這兩者常被結合使用,以達到性能與可靠性的平衡,例如透過 OCSP 進行即時查詢,並在伺服器無法使用時回退到 CRL 驗證。
自然人憑證 CRL 說明
從內政部憑證管理中心網站可以看到廢止清冊的說明,其中說明到 CRL 與 OCSP 的使用情境。
本清冊於每日凌晨零時及中午12時產製,與憑證用戶之實際憑證狀態最長會有12小時的時間差,憑證信賴者在使用CRL來驗證憑證狀態時,應評估此時間差之風險,或改用線上即時憑證狀態查詢(OCSP)。

https://moica.nat.gov.tw/save\_1.html
而憑證內也會標 CRL 發布點
- 第二代自然人憑證 CRL:http://moica.nat.gov.tw/repository/MOICA/CRL2/complete.crl
- 第三代自然人憑證 CRL:
http://ocsp-moica.moi.gov.tw/crl/MOICA-complete.crl
上面兩個檔案大概是 23.5 MB

在 Windows 上,可以直接打開 CRL 檔案查看廢止的序號,舊可以看到裡面的欄位,包含序號、日期、原因。

也可以透過 openssl 指令查看 CRL 檔案內的憑證序號
$ openssl crl -in complete.crl -text
Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: C=TW, O=行政院, OU=內政部憑證管理中心 Last Update: Jan 9 03:30:39 2025 GMT Next Update: Jan 10 15:00:00 2025 GMT CRL extensions: X509v3 Authority Key Identifier: FA:9B:34:67:09:0A:98:22:F7:62:48:8B:82:26:A6:45:C5:C3:22:A4 X509v3 CRL Number: 2025010911Revoked Certificates: Serial Number: 010011DACC0D18EEC20EBC2C1635A11F Revocation Date: Apr 18 13:00:39 2022 GMT CRL entry extensions: X509v3 CRL Reason Code: Affiliation Changed Serial Number: 01002D0711C234AA0CC3786649E47A7E Revocation Date: Dec 27 13:01:30 2022 GMT CRL entry extensions: X509v3 CRL Reason Code: Affiliation Changed
簡單的檢查方法,可以從憑證中取的序號,檢查看看 CRL 中是否包含
# 讀取憑證序號$ openssl x509 -in 1.crt -serial -nooutserial=D43A822D041F2ABCBFC49B9940BXXXXX
# 在 CRL 中尋找序號是否存在,找到代表憑證被廢止$ openssl crl -in complete.crl -text | grep D43A822D041F2ABCBFC49B9940BXXXXXSerial Number: D43A822D041F2ABCBFC49B9940BXXXXX自然人憑證 OCSP 說明
前者 CRL 需要下載整個憑證廢止清冊才能比對,且會有更新時間差,使用 OCSP 則可以即時查詢。
從憑證欄位中可以得知二代憑證與三代憑證 OCSP 伺服器不同,分別如下:
- 第二代自然人憑證 OCSP:
http://moica.nat.gov.tw/cgi-bin/OCSP2/ocsp_server.exe - 第三代自然人憑證 OCSP:
http://ocsp-moica.moi.gov.tw/OCSP
透過 openssl 指令可以查詢憑證是否被廢止,這裡需要使用到內政部憑證中心的中繼憑證
$ openssl ocsp -issuer moica2.cer -cert 1.crt -url http://moica.nat.gov.tw/cgi-bin/OCSP2/ocsp_server.exe -resp_text
# 以下是我掛失的二代憑證結果,憑證狀態是註銷,註銷原因是 supersededOCSP Response Data: OCSP Response Status: successful (0x0) Response Type: Basic OCSP Response Version: 1 (0x0) Responder Id: C = TW, O = \E8\A1\8C\E6\94\BF\E9\99\A2, OU = \E5\85\A7\E6\94\BF\E9\83\A8\E6\86\91\E8\AD\89\E7\AE\A1\E7\90\86\E4\B8\AD\E5\BF\83, CN = OCSP Server Produced At: Jan 9 09:57:56 2025 GMT Responses: Certificate ID: Hash Algorithm: sha1 Issuer Name Hash: 25AB5E84667697EC05B31A594FEBAxxxx Issuer Key Hash: FA9B3467090A9822F762488B8226A6xxxx Serial Number: D43A822D041F2ABCxxxxxx Cert Status: revoked Revocation Time: Sep 11 10:39:20 2024 GMT Revocation Reason: superseded (0x4)
# 以下是我正常的三代憑證結果,憑證狀態是正常的OCSP Response Data: OCSP Response Status: successful (0x0) Response Type: Basic OCSP Response Version: 1 (0x0) Responder Id: C = TW, O = \E8\A1\8C\E6\94\BF\E9\99\A2, OU = \E5\85\A7\E6\94\BF\E9\83\A8\E6\86\91\E8\AD\89\E7\AE\A1\E7\90\86\E4\B8\AD\E5\BF\83, CN = OCSP Server Produced At: Jan 9 10:02:06 2025 GMT Responses: Certificate ID: Hash Algorithm: sha1 Issuer Name Hash: 25AB5E84667697EC05B31A594FEBxxxx Issuer Key Hash: 4720A3B1264BCD6D48ACF264088xxxx Serial Number: A9CEF71E5BC6B99FECBBBD29Fxxxx Cert Status: goodCRL 與 OCSP 的選擇
到底要用 CRL 還是 OCSP 取決於你的伺服器環境,有些環境比較封閉,沒辦法對外連網,需要手動更新 CRL,則可以離線更新。需要更即時的驗證可以選擇 OCSP。
不過要注意的是,OCSP 是即時驗證,所以當內政部 OCSP API 異常的時候,將會導致驗證失敗,可能會影響到介接系統的穩定性,CRL 則可以在主機進行快取。
通常在開發時候,有些已經整合好的廢止清冊檢查套件,則要注意他是用 CRL 或 OCSP 驗證。依據實際需求來做決定。