1386 字
7 分鐘
憑證廢止清冊
2025-01-09
無標籤

憑證廢止清冊(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

https://moica.nat.gov.tw/save\_1.html

而憑證內也會標 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:
2025010911
Revoked 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 中是否包含

Terminal window
# 讀取憑證序號
$ openssl x509 -in 1.crt -serial -noout
serial=D43A822D041F2ABCBFC49B9940BXXXXX
# 在 CRL 中尋找序號是否存在,找到代表憑證被廢止
$ openssl crl -in complete.crl -text | grep D43A822D041F2ABCBFC49B9940BXXXXX
Serial Number: D43A822D041F2ABCBFC49B9940BXXXXX

自然人憑證 OCSP 說明#

前者 CRL 需要下載整個憑證廢止清冊才能比對,且會有更新時間差,使用 OCSP 則可以即時查詢。

從憑證欄位中可以得知二代憑證與三代憑證 OCSP 伺服器不同,分別如下:

透過 openssl 指令可以查詢憑證是否被廢止,這裡需要使用到內政部憑證中心的中繼憑證

$ openssl ocsp -issuer moica2.cer -cert 1.crt -url http://moica.nat.gov.tw/cgi-bin/OCSP2/ocsp_server.exe -resp_text
# 以下是我掛失的二代憑證結果,憑證狀態是註銷,註銷原因是 superseded
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 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: good

CRL 與 OCSP 的選擇#

到底要用 CRL 還是 OCSP 取決於你的伺服器環境,有些環境比較封閉,沒辦法對外連網,需要手動更新 CRL,則可以離線更新。需要更即時的驗證可以選擇 OCSP。

不過要注意的是,OCSP 是即時驗證,所以當內政部 OCSP API 異常的時候,將會導致驗證失敗,可能會影響到介接系統的穩定性,CRL 則可以在主機進行快取。

通常在開發時候,有些已經整合好的廢止清冊檢查套件,則要注意他是用 CRL 或 OCSP 驗證。依據實際需求來做決定。