5.3 CRL格式
5.3.1 綜述
本標準采用GB/T 16262系列標準的特定編碼規則(DER)對下列證書撤銷列表項中的各項信息進行編碼,組成特定的證書撤銷列表數據結構。ASN.1 DER 編碼是關于每個元素的標記、長度和值的編碼系統。
5.3.2 CRL的數據結構
CRL數據結構的ASN.1描述如下:
CertificateList ::= SEQUENCE {
tbsCertList TBSCertList,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertList ::= SEQUENCE {
version Version OPTIONAL,
--如果出現,必須是v2
signature AlgorithmIdentifier,
issuer Name,
thisUpdate Time,
nextUpdate Time OPTIONAL,
revokedCertificates SEQUENCE OF SEQUENCE {
userCertificate CertificateSerialNumber,
revocationDate Time,
crlEntryExtensions Extensions OPTIONAL
-- 如果出現,version必須是v2
} OPTIONAL,
crlExtensions [0] EXPLICIT Extensions OPTIONAL
-- 如果出現,version必須是v2
}
上述的CRL數據結構由tbsCertList、signatureAlgorithm和signatureValue三個域構成。這些域的含義如下:
— tbsCertList域包含了主體名稱和頒發者名稱、頒發日期、撤銷的證書信息和CRL的擴展信息。
— signatureAlgorithm域包含CA簽發該CRL所使用的算法標識符。一個算法標識符的ASN.1結構如下:
AlgorithmIdentifier ::= SEQUENCE
{
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
算法標識符用來標識一個密碼算法,其中的OBJECT IDENTIFIER 部分標識了具體的算法。其中可選參數的內容完全依賴于所標識的算法。該域的算法標識符必須與tbsCertList中的signature標識的簽名算法項相同。如果簽名算法為SM2,無參數。
— signatureValue域包含了對tbsCertList域進行數字簽名的結果。采用ASN.1 DER編碼的tbsCertList作為數字簽名的輸入,而簽名的結果則按照ASN.1編碼成BIT STRING類型并保存在CRL簽名值域內。如果簽名算法為SM2,SM2密碼算法簽名數據格式參見GB/T BBBB。
5.3.3 TBSCertList 及其數據結構
TBSCertList主要包含了版本號、頒發者、生效日期、下次更新日期、簽名算法、簽發機構密鑰標識符、撤銷的證書信息。有些TBSCertList還可以包含可選的擴展項。本條的下述段落描述這些項的語法和語義。
5.3.3.1 版本 version
本可選項描述了編碼CRL的版本號。如果使用了Extensions 項,則此項必須存在,且其值必須是version 2(用整數1表示)。
5.3.3.2 簽名算法 signature
本項包含CA簽發該CRL所使用的密碼算法的標識符,這個算法標識符必須與CertificateList 中signatureAlgorithm項的算法標識符相同。使用國家密碼管理主管部門審核批準的相關算法。
5.3.3.3 頒發者 issuer
本項標識了簽名和頒發CRL的實體。它必須包含一個非空的甄別名稱(DN-distinguished name)。該項被定義為Name類型。
Issuer的編碼規則同5.3.3.4。
5.3.3.4 生效日期 thisUpdate
本項標明了CRL的頒發日期,使用UTCTime or GeneralizedTime編碼。
遵循本標準的CRL頒發者在2049年之前(包括2049年)必須將該時間編碼為UTCTime類型,在2050年之后,編碼為GeneralizedTime類型。
UTCTime的編碼規則同5.3.3.5.2。
GeneralizedTime的編碼規則同5.3.3.5.3。
5.3.3.5 下次更新日期 nextUpdate
本項標明了下一次CRL將要發布的時間。下一次CRL可以在此時間前簽發,但不能晚于此時間簽發。使用UTCTime or GeneralizedTime編碼。
遵循本標準的CRL頒發者必須在簽發的CRL中包含nextUpdate項。
遵循本標準的CRL頒發者在2049年之前(包括2049年)必須將該時間編碼為UTCTime類型,在2050年之后,編碼為GeneralizedTime類型。
UTCTime的編碼規則同5.3.3.5.2。
GeneralizedTime的編碼規則同5.3.3.5.3。
5.3.3.6 被撤銷的證書列表 Revoked Certificates
該域標明被撤銷的證書序列號、撤銷時間和撤銷原因。
如果沒有被撤銷的證書,此項不存在。否則,列出被撤銷證書的序列號,并指定撤銷的日期。
5.3.3.7 擴展項 crlExtensions
該域只可在version 2出現。如果出現,此項由一個或多個CRL擴展的序列組成。
crlExtensions在5.3.4 描述。
5.3.4 CRL擴展項及其數據結構
5.3.4.1 頒發機構密鑰標識符 authorityKeyIdentifier
頒發機構密鑰標識符擴展提供了一種方式,以識別與CRL簽名私鑰相應的公鑰。當頒發者由于有多個密鑰共存或由于發生變化而具有多個簽名密鑰時使用該擴展。識別可基于頒發者的主體密鑰標識符或基于頒發者的名稱和序列號。
5.3.4.2 頒發者替換名稱 issuerAltName
本項包含一個或多個替換名稱(可使用多種名稱形式中的任一個),以供CRL頒發者使用。
5.3.4.3 證書撤銷列表號 crlNumber
證書撤銷列表號是一個非關鍵的CRL擴展,表示在給定的CRL頒發者和CRL范圍內一個單調遞增序列。這個擴展可以讓用戶方便地確定一個特定的CRL何時取代另一個CRL。證書撤銷列表號也支持鑒別一個附件的完整CRL和增量CRL。
如果CRL頒發者在一個特定范圍內除了生成完整CRL外,還生成增量CRL,完整CRL和增量CRL必須共享同一個編號序列。如果完整CRL和增量CRL在同一時間頒發,它們必須使用相同的證書撤銷列表號,并提供相同的撤銷信息。
如果CRL頒發者在一個特定范圍內的不同時間生成兩個CRL(兩個完整CRL,兩個增量CRL,或者一個完整CRL和一個增量CRL),這兩個CRL不能使用相同的證書撤銷列表號。也就是說,如果兩個CRL的thisUpdate域不同,證書撤銷列表號必須不同。
CRL號可以使用長整數。CRL驗證者必須能夠處理20字節的證書撤銷列表號。遵循本標準的CRL頒發者不使用大于20字節的證書撤銷列表號。
id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
CRLNumber ::= INTEGER (0..MAX)
5.3.4.4 增量證書撤銷列表指示 delta CRL Indicator
增量證書撤銷列表指示是一個關鍵CRL擴展,表明一個CRL是增量CRL。增量CRL包含上次發布之后的撤銷信息,而不是將所有的撤銷信息包含在一個完整CRL里。在一些環境里使用增量CRL可以顯著減少網絡流量和處理時間。
增量證書撤銷列表指示擴展包含一個類型為BaseCRLNumber的單一值。證書撤銷列表號標識了此增量CRL使用的起始CRL。遵循本標準的CRL頒發者必須將參考基準CRL頒發為完整CRL。增量CRL包含所有的更新撤銷狀態。增量CRL和參考基準CRL的組合與完整CRL是等效的。
當遵循本標準的CRL頒發者生成增量CRL,此增量CRL必須包含一個關鍵的增量證書撤銷列表指示擴展項。
id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
BaseCRLNumber ::= CRLNumber
5.3.4.5 頒發分發點 issuing Distribution Point
頒發分發點是一個關鍵CRL擴展,表明一個特定CRL的分發點和范圍,還表明這個CRL是否只包含了用戶證書的撤銷、CA證書的撤銷或者一系列的原因代碼。
id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
IssuingDistributionPoint ::= SEQUENCE {
distributionPoint [0] DistributionPointName OPTIONAL,
onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE,
onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE,
onlySomeReasons [3] ReasonFlags OPTIONAL,
indirectCRL [4] BOOLEAN DEFAULT FALSE,
onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
5.3.4.6 最新證書撤銷列表 freshest CRL
最新證書撤銷列表擴展項表明完整CRl的增量CRL信息如何獲取。遵循本標準的CRL頒發者必須將此項標記成非關鍵。此項不在增量CRL中出現。
最新證書撤銷列表擴展項的格式和數字證書的cRLDistributionPoints擴展項相同。但是,該最新證書撤銷列表擴展項中分發點域是有意義的;同時Reasons和cRLIssuer域必須略去。
id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 }
FreshestCRL ::= CRLDistributionPoints
5.3.4.7 證書撤銷列表條目 CRL Entry
5.3.4.7.1 原因代碼 reason Code
原因代碼為非關鍵擴展,表明證書撤銷的原因。
代碼removeFromCRL (8)只用于增量CRL。其它代碼可以用于任意CRL。
id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }
-- reasonCode ::= { CRLReason }
CRLReason ::= ENUMERATED {
unspecified (0),
keyCompromise (1),
cACompromise (2),
affiliationChanged (3),
superseded (4),
cessationOfOperation (5),
certificateHold (6),
-- 7 不使用
removeFromCRL (8),
privilegeWithdrawn (9),
aACompromise (10) }
5.3.4.7.2 撤銷時間 invalidity Date
撤銷時間是個非關鍵擴展,表明知道或懷疑私鑰泄露或證書失效的時間。
該域包含的GeneralizedTime必須使用格林威治標準時間,必須按照5.3.3.5.3的要求表示。
id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
InvalidityDate ::= GeneralizedTime
5.3.4.7.3 證書頒發者 certificate Issuer
如果存在,證書頒發者擴展包含一個或多個和CRL條目對應的,從證書的頒發者域和/或頒發者替換名稱域得到的名字。
id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }
CertificateIssuer ::= GeneralNames
附錄C規定了證書撤銷列表內容。
推薦文章: