信息安全技术公钥基础设施
数字证书格式
GB/T 20518-2018
本标准规定了数字证书和证书撤销列表的基本结构、各数据项内容。适用于数字证书认证系统的研发、数字证书认证机构的运营以及基于数字证书的安全应用。
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件,凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
下列术语和定义适用于本文件。
支持公钥管理体制的基础设施,提供鉴别、加密、完整性和不可否认性服务。
用户的公钥连同其他信息,并由发布该证书的证书认证机构的私钥进行加密使其不可伪造。
一个已标识的列表,它指定了一套证书颁发者确认为无效的证书。除了普通CRL外,还定义了一些特殊的CRL类型用于覆盖特殊领域的CRLS。
在CA颁发的证书范围内为每个证书分配的一个整数值。此整数值对于该CA所颁发的每一张证书必须是唯一的。
受用户信任,负责创建和分配证书的权威机构。证书认证机构也可以为用户创建密钥。
一个CRL的目录项或其他CRL分发源,通过CRL分发点分发的CRL可以只含有某个CA所颁发的证书全集中的某个子集的撤销项,也可以包括有多个CA的撤销项。
由国家认可的,具有权威性、可信性和公正性的第三方证书认证机构(CA)进行数字签名的一个可信的数字化文件。
数字证书具有以下特性:
由于证书是不可伪造的,所以可以通过将其放置在目录中来发布,而不需要以后特意去保护它们。认证机构通过对信息集合的签名来生成用户证书,信息集合包括可辨别的用户名、公钥以及一个可选的包含用户附加信息的唯一性标识符。唯一性标识符内容的确切格式这里未做规定,而留给认证机构去定义。唯一性标识符可以是诸如对象标识符、证书、目期或是说明有关可辨别用户名的有效性的证书的其他形式。具体地说,如果一个用户证书的可辨别名为A,唯一性标识符为UA,并且该证书是由名为CA,其唯一性标识符为UCA的认证机构生成的,则用户证书具有下列的形式:
这里V为证书版本;SN为证书序列号;AI为用来签署证书的算法标识符;UCA为CA的可选的唯一性标识符;UA为用户A的可选的唯一性标识符;Ap为用户A的公钥;TA表示证书的有效期,由两个目期组成,两者之间的时间段即是证书的有效期。证书有效期是一个时间区间,在这个时间区间里,CA应保证维护该证书的状态信息,也就是发布有关撤销的信息数据。由于假定TA在不小于24h的周期内变化,要求系统以格林威治时间为基准时间。证书上的签名可被任何知道CA公钥CAp的用户用来验证证书的有效性。
CRL是CA对撤销的证书而签发的一个列表文件,该文件可用于应用系统鉴别用户证书的有效性。CRL遵循X.509V2标准的证书撤销列表格式。
组成特定的证书数据结构。ASN.1DER编码是关于每个元素的标记、长度和值的编码系统
本标准采用GB/T16262.1-2006的特定编码规则(DER)对下列证书项中的各项信息进行编码。
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, --如果出现,verson必须是v2或v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,--如果出现,verson必须是v2或v3
extensions [3] EXPLICIT Extensions OPTIONAL
}
Version ::= INTEGER { v1(0), v2(1), v3(2) }
CertificateSerialNumber ::=INTEGER
Validity::= SEQUENCE {
notBefore Time,
notAfter Time
}
Time::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime
}
UniqueIdentifier ::= BIT STRING
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING
}
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
}
X509 V3版本 链接:https://www.rfc-editor.org/rfc/rfc5280
中英对照 https://rfc2cn.com/rfc5280.html
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING }
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3
extensions [3] EXPLICIT Extensions OPTIONAL
-- If present, version MUST be v3
}
Version ::= INTEGER { v1(0), v2(1), v3(2) }
CertificateSerialNumber ::= INTEGER
Validity ::= SEQUENCE {
notBefore Time,
notAfter Time }
Time ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
UniqueIdentifier ::= BIT STRING
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
-- contains the DER encoding of an ASN.1 value
-- corresponding to the extension type identified
-- by extnID
}
上述的证书数据结构由 tbsCertificate,signatureAlgorithm和signatureValue 三个域构成。这些域的含义如下:
tbsCertificate域包含了主体名称和签发者名称、主体的公钥、证书的有效期以及其他的相关信息。
signatureAlgorithm 域包含证书签发机构签发该证书所使用的密码算法的标识符。ASN.1结构如下:
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
算法标识符用来标识一个密码算法,其中的 OBJECT IDENTIFIER 部分标识了具体的算法。其中可选参数的内容完全依赖于所标识的算法。如果签名算法为SM2,则无参数。
signatureValue 域包含了对 tbsCertificate 域进行数字签名的结果。采用ASN.1 DER编码的 tbsCertificate 作为数字签名的输入,而签名的结果则按照ASN.1编码成 BIT STRING 类型并保存在证书签名值域内。
如果签名算法为SM2,SM2密码算法签名数据格式见GB/T35276。
本项描述了编码证书的版本号。
序列号是CA分配给每个证书的一个正整数,一个CA签发的每张证书的序列号应是唯一的。CA应保证序列号是非负整数,并且不使用超过20个8比特节的序列号。
本项包含CA签发该证书所使用的密码算法的标识符,该算法标识符应与证书中 signatureAlgorithm
项的算法标识符相同。
本项标识了证书签名和证书颁发的实体。它应包含一个非空的甄别名称(DN - distinguished name)。以下是Name类型的ASN.1结构:
Name ::= CHOICE {
RDNSequence
}
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue
}
AttributeType ::= OBJECT IDENTIFIER
AttributeValue :: = ANY DEFINED BY AttributeType
DirectoryString ::= CHOICE {
teletexString TeletexString (SIZE (1..MAX)),
printableString PrintableString (SIZE (1..MAX)),
universalString UniversalString(SIZE (1..MAX)),
utf8String UTF8String(SIZE(1..MAX)) ,
bmpString BMPString(SIZE(1..MAX)))
}
Name描述了由一些属性组成的层次结构的名称,如国家名、相应的值,如“国家=CN”。其中At-tributeValue 部分的类型是由 AttributeType 确定的,通常它是一个 DirectoryString 类型。DirectoryString 类型被定义为 PrintableString,TeletexString,BMPString,UTF8String 和 UniversalString类型之一。UTF8String编码是首选的编码。
证书有效期是一个时间段,在这个时间段内,CA担保它将维护关于证书状态的信息。该项被表示成一个具有两个时间值的SEQUENCE类型数据:证书有效期的起始时间(notBefore)和证书有效期的终止时间(notAfter)。NotBefore和notAfter这两个时间都可以作为UTCTime类型或者GeneralizedTime类型进行编码。
遵循本标准的CA在2049年之前(包括2049年)应将该时间编码为UTCTime类型,在2050年之后,编码为GeneralizedTime类型。
本项是为国际应用设立的一个标准ASN.1类型,在这里只有本地时间是不够的。UTCTime通过两个低位数确定年,时间精确到一分钟或一秒钟。UTCTime包含Z(用于Zulu,或格林威治标准时间)或时间差。
在本标准中,UTCTime值应用格林威治标准时间(Zulu)表示,并且应包含秒,即使秒的数值为零(即时间格式为YYMMDDHHMMSSZ)。系统对年学段(YY)应如下解释:
本项是一个标准ASN.1类型,表示时间的可变精确度。GeneralizedTime字段能包含一个本地和格林威治标准时间之间的时间差。
本标准中,GeneralizedTime值应使用格林威治标准时间表示,且应包含秒,即使秒的数值为零(即时间格式为YYYYMMDDHHMMSSZ)。GeneralizedTime值绝不能包含小数秒(fractionalseconds)。
主体项描述了与主体公钥项中的公钥相对应的实体。主体名称可以出现在主体项和/或主体可选替换名称扩展项中(subjectAltName)。如果主体是一个CA,那么主体项应是一个非空的与签发者项的内容相匹配的甄别名称(distinguishedname)。如果主体的命名信息只出现在主体可选替换名称扩展项中(例如密钥只与一个Email地址或者URL绑定),那么主体名称应是一个空序列,且主体可选替换名称扩展项应被标识成关键的。
当主体项非空时,这个项应包含一个X.500的甄别名称(DN),一个CA认证的每个主体实体的甄别名称应是唯一的。一个CA可以为同一个主体实体以相同的甄别名称签发多个证书。
主体名称扩展项被定义成GB/T16264.8-2005的名字类型。
本项用来标识公钥和相应的公钥算法。公钥算法使用算法标识符 AlgorithmIdentifier
结构来表示。
当公钥算法为SM2时,AlgorithmIdentifier
结构定义见GB/T35275。
当公钥算法为RSA时,AlgorithmIdentifier
结构定义见PKCS#7。
本项主要用来处理主体或者颁发者名称的重用问题。本标准建议不同的实体名称不要重用,互联网网的证书不要使用唯一标识符。遵循本标准的证书签发机构应不生成带有颁发者唯一标识符的证书,但是在应用过程中应能够解析该项并进行对比。
本项主要用来处理主体名称的重用问题,本标准建议对不同的实体名称不要重用,并且不建议使用此项。遵循本标准的证书签发机构应不生成带有主体唯一标识符的证书,但是在应用过程中应能够解析唯一标识符并进行对比。
该项是一个或多个证书扩展的序列(SEQUENCE),其内容和数据结构在5.2.4中定义。
本标准定义的证书扩展项提供了把一些附加属性同用户或公钥相关联的方法以及证书结构的管理方法。数字证书允许定义标准扩展项和专用扩展项。每个证书中的扩展可以定义成关键性的和非关键性的。
一个扩展含有三部分,它们分别是 扩展类型、扩展关键度和扩展项值。
扩展关键度(extension criticality)告诉一个证书的使用者是否可以忽略某一扩展类型。
证书的应用系统如果不能识别关键的扩展时,应拒绝接受该证书;如果不能识别非关键的扩展,则可以忽略该扩展项的信息。
本条定义一些标准的扩展项。需要特别注意的是,在实际应用过程中,如果采用了关键性的扩展,可能导致在一些通用的应用中无法使用该证书。
每个扩展项包括一个对象标识符OID和一个ASN.1结构。当证书中出现一个扩展时,OID作为extnID项出现,其对应的ASN.1编码结构就是8bit字符串extnValue的值。一个特定的证书中特定的扩展只可出现一次。例如,一个证书只可以包含一个认证机构密钥标识符扩展。一个扩展中包含一个布尔型的值用来表示该扩展的关键性,其缺省值为FALSE,即非关键的。每个扩展的正文指出了关键性项的可接收的值。
遵循本标准的CA应支持以下扩展:
如果CA签发的证书中主体项为空序列,该CA还应支持主体可替换名称扩展。其他的扩展是可选的。CA还可以支持本标准定义之外的其他扩展。证书的签发者应注意,如果这些扩展被定义为关键的,则可能会给互操作性带来障碍。
遵循本标准的应用应至少能够识别以下扩展:
另外,本标准建议还能支持以下扩展:
5.2.4.2定义数字证书的标准证书扩展,每个扩展与GB/T16264.8-2005中定义的一个OID相关。这些OID都是id-ce的成员,其定义如下:
id-ce OBJECT IDENTIFIER := (joint-iso-ccitt(2) ds(5) 29)
颁发机构密钥标识符扩展提供了一种方式,以识别与证书签名私钥相应的公钥。当颁发者由于有多个密钥共存或由于发生变化而具有多个签名密钥时使用该扩展。识别可基于发行方证书中的主体密钥标识符或基于颁发者的名称和序列号。
相应CA产生的所有证书应包括 authorityKeyIdentifier
扩展的 keyIdentifier
项,以便于链的建立。CA以"自签"(self-signed)证书形式发放其公钥时,可以省略认证机构密钥标识符。此时,主体和认证机构密钥标识符是完全相同的。
本项既可用作证书扩展亦可用作CRL扩展。本项标识用来验证在证书或CRL上签名的公开密钥。它能辨别同一CA使用的不同密钥(例如,在密钥更新发生时)。
本项定义如下:
id-ce-authorityKeyIdentifier OBJECT IDENTIFIER := (id-ce 35)
AuthorityKeyIdentifier ::= SEQUENCE {
keyIdentifier [0] KeyIdentifier OPTIONAL,
authorityCertIssuer [1] GeneralNames OPTIONAL,
authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL
}
(WITH COMPONENTS {...,authorityCertIssuer PRESENT,
authorityCertSerialNumber PRESENT} |
WITH COMPONENTS{...,authorityCertIssuer ABSENT,
authorityCertSerialNumber ABSENT } )
}
KeyIdentifier ::= OCTET STRING
KeyIdentifier 项的值应从用于证实证书签名的公钥导出或用产生唯一值的方法导出。公开密钥的密钥标识符 KeyIdentifier 可采用下述两种通用的方法生成:
a. keyIdentifier 由 BIT STRING subjectPublicKey 值的160-bit SHA1杂凑值组成(去掉标签、长度和不使用的字节);
b. keyIdentifier 由 01 00 后跟的 BIT STRING subjectPublicKey 值的 SHA-1 杂凑值中最低的60bit组成。
此密钥可以通过 keyIdentifier 字段中的密钥标识符来标识,也可以通过此密钥的证书的标识(给出 authorityCertIssuer 字段中的证书颁发者以及 authorityCertSerialNumber 字段中的证书序列号)来标识,或者可以通过密钥标识符和此密钥的证书标识来标识。如果使用两种标识形式,那么,证书或CRL的颁发者应保证它们是一致的。对于颁发机构的包含扩展的证书或CRL的所有密钥标识符而言,每个密钥标识符应该是唯一的。不要求支持此扩展的实现能够处理 authorityCertIssuer 字段中的所有名字形式。
证书认证机构指定或者自动产生证书序列号,这样颁发者和证书序列号相结合就唯一地标识了一份证书。
除自签证书之外,所有的证书应包含本扩展,而且应包含 keyIdentifier 项。如果证书的颁发者的证书有 SubjectKeyIdentifier 扩展,则本扩展中 keyIdentifier 项应与颁发者的证书的 SubjectKeyIdentifier 扩展的值一致。,如果证书的颁发者的证书没有SubjectKeyIdetifier 扩展,则可以使用文中介绍的两种方法之一来产生。
结构中的 keyldentifier,authorityCertSerialNumber 建议为必选,但本扩展应是非关键的
主体密钥标识符扩展提供一种识别包含有一个特定公钥的证书的方法。此扩展标识了被认证的公开密钥。它能够区分同一主体使用的不同密钥(例如,当密钥更新发生时)。
定义如下:
id-ce-subjectKeyIdentifier OBJECT IDENTIFIER := id-ce 14
SubjectKeyIdentifier := KeyIdentifier
对于使用密钥标识符的主体的各个密钥标识符而言,每一个密钥标识符均应是唯一的。此扩展项总是非关键的。
所有的CA证书应包括本扩展;而且CA签发证书时应把CA证书中本扩展的值赋给终端实体证书 AuthorityKeyIdentifier
扩展中的 KeyIdentifier
项。CA证书的主体密钥标识符应从公钥或生成唯一值的方法中导出。终端实体证书的主体密钥标识符应从公钥中导出。有两种通用的方法从公钥中生成密钥标符。
此扩展指示已认证的公开密钥用于何种用途。定义如下:
id-ce-keyUsage OBJECT IDENTIFIER := (id-ce 15)
KeyUsage := BIT STRING {
digitalSignature (0),
nonRepudiation (1),
keyEncipherment (2),
dataEncipherment (3),
keyAgreement (4),
keyCertSign (5),
cRLSign (6),
encipherOnly (7),
decipherOnly (8)
}
KeyUsage用途
若缺少 keyAgreement位,则不定义 encipherOnly位的含义。若确定 encipherOnly 位,且 keyAgreement位也被确定时,主体公钥可只用于加密数据,同时执行密钥协议。
若缺少 keyAgreement位,则不定义decipherOnly 位的含义。若确定 decipherOnly 位,且 keyAgreement位也被确定时,主体公钥可只用于脱密数据,同时执行密钥协议。
所有的CA证书应包括本扩展,而且应包含keyertSign这一用法。此扩展可以定义为关键的或非关键的,由证书签发者选择。
如果此扩展标记为关键的,那么该证书应只用于相应密钥用法位置为“1”的用途。
如果此扩展标记为非关键的,那么它指明此密钥的预期的用途或多种用途,并可用于查找具有多密钥/证书的实体的正确密钥/证书。它是一个咨询项,并不意指此密钥的用法限于指定的用途。置为“0”的位指明此密钥不是预期的这一用途。如果所有位均为“0”,它指明此密钥预期用于所列用途之外的某种用途。
在应用中,使用该扩展项对证书类型的进行区别,当设置了c)、d)、h),i)位中的一位时,表示该证书为加密证书;当设置了a)、b)位中的一位时,表示该证书为签名证书。
此项指明已验证的公开密钥可以用于一种用途或多种用途,作为对密钥用法扩展项中指明的基本用途的补充或替代。此项定义如下:
id-ce-extKeyUsage OBJECT IDENTIFIER := {id-ce 37)
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
KeyPurposeId := OBJECT IDENTIFIER
密钥的用途可由有此需要的任何组织定义。用来标识密钥用途的对象标识符应按照GB/T17969.1—2015来分配。由证书签发者确定此扩展是关键的或非关键的。
如果此扩展标记为关键的,那么此证书应只用于所指示的用途之一。
如果此扩展标记为非关键的,那么,它指明此密钥的预期用途或一些用途,并可用于查找多密钥/证书的实体的正确密钥/证书。它是一个咨询项,并不表示认证机构将此密钥的用法限于所指示的用途然而,进行应用的证书仍然可以要求指明特定的用途,以便证书为此应用接受。
如果证书包含关键的密钥用途项和关键的扩展密钥项,那么,两个项应独立地处理,并且证书应只用于与两个项一致的用途。如果没有与两个项一致的用途,那么,此证书不能用于任何用途。
本标准定义下列密钥用途:
id-kp OBJECT IDENTIFIER ::= {id-pkix 3}
id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }
--TLS Web server 鉴别
--Key usage可以设置为 digitalSignature, keyEncipherment 或 keyAgreement
id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }
--TLS Web server 鉴别--Key usage 可以设置为digitalSignature和/或keyAgreement
id-kp-codeSigning OBJECT IDENTIFIER ::={ id-kp 3 }
--可下载执行代码的签名
--Key usage 可以设置为 digitalSignature
id-kp-emailProtection OBJECT IDENTIFIER ::={ id-kp 4 }
--E-mail 保护
--Key usage 可以设置为 digitalSignature,nonRepudiation 和/或(keyEncipherment 或 keyAgreement)
--id-kp-timeStamping OBJECT IDENTIFIER ::={id-kp 8 )
--将对象的Hash与同一时间源提供的时间绑定
--Key usage可以设置为digitalSignature,nonRepudiation
id-kp-OCSPSigningOBJECT IDENTIFIER ::={ id-kp 9 }
--OCSP 应答签名
--Key usage 可以设置为 digitalSignature,nonRepudiation
本项指明与已验证的公开密钥相对应的私有密钥的使用期限,只能用于数字签名密钥。此项定义如下:
id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER := (id-ce 16)
PrivateKeyUsagePeriod ::= SEQUENCE {
notBefore [0] GeneralizedTime OPTIONAL,
notAfter [1] GeneralizedTime OPTIONAL
}
notBefore
字段指明私有密钥可能用于签名的最早日期和时间。如果没有notBefere字段,那么不提供有关私有密钥有效使用期何时开始的信息。
notAfter
NotAfter 字段指明私有密钥可以用于签名的最迟日期和时间。如果没有notAfter字段,那么,不提供有关私有密钥有效使用期何时结束的信息。
这个扩展总是为非关键的。
注1:私有密钥有效使用期可以与证书有效性周期指明的已验证的公开密钥有效性不同。就数学签名密钥而言,签名的私有密钥使用期一般比验证公开密钥的时间短。
注2:数字签名的验证者想要检查直到验证时刻此密钥是否未被撤销,例如,由于密钥泄露,那么,在验证时,对公开密钥而言的有效证书仍存在。在公开密钥的证书期满之后,签名验证者 不能依赖CRL所通知的协议。
本项列出了由颁发的CA所认可的证书策略,这些策略适用于证书以及关于这些证书策略的任选的限定符信息。
证书策略扩展包含了一系列策略信息条目,每个条目都有一个〇ID和一个可选的限定条件。这个可选的限定条件不要改变策略的定义。
在用户证书中,这些策略信息条目描述了证书发放所依据的策略以及证书的应用目的:在CA证书中,这些策略条目指定了包含这个证书的验证路径的策略集合。具有特定策略需求的应用系统应拥有它们将接受的策略的列表,并把证书中的策略OID与该列表进行比较。如果该扩展是关键的,则路径有效性软件应能够解释该扩展(包括选择性限定语),否则应拒绝该证书。
为了提高互操作性,本标准建议策略信息条目中只包含一个OID,如果一个OID不够,建议使用本章定义的限定语。
为了提高互操作性,本标准建议策略信息条目中只包含一个OID,如果一个OID不够,建议使用本章定义的限定语。
id-ce-certificatePolicies OBJECT IDENTIFIER ::= {id-ce 32 }
certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
PolicyInformation :;= SEQUENCE {
policyIdentifier CertPolicyId,
policyQualifiers SEQUENCE SIZE (1..MAX) OF PolicyQualifierInfo OPTIONAL
}
CertPolicyId ::= OBJECT IDENTIFIER
PolicyQualifierInfo ::= SEQUENCE {
policyQualifierId PolicyQualifierId,
qualifier ANY DEFINED BY policyQualifierId
}
--policyQualifierIds for Internet policy qualifiers
id-qt OBJECT IDENTIFIER ::={ id-pkix 2 }
id-qt-cps OBJECT IDENTIFIER ::=( id-qt 1 }
id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 }
PolicyQualifierld ::=OBJECT IDENTIFIER(id-qt-cps|id-qt-unotice)
Qualifier ::=CHOICE{
cPSuri CPSuri,
userNotice UserNotice
}
CPSuri ::= IA5String
UserNotice ::=SEQUENCE {
noticeRef NoticeReference OPTIONAL,
explicitText DisplayText OPTIONAL
}
NoticeReference ::= SEQUENCE {
organization DisplayText,
noticeNumbers SEQUENCE OF INTEGER
}
DisplayText ::= CHOICE {
visibleString VisibleString(SIZE(1··200)),
bmpString BMPString(SIZE(1·200)),
utf8String UTF8String(SIZE(1.·200))
}
本项定义了两种策略限定语,以供证书策略制定者和证书签发者使用。限定语类型为CPSPointer和 User Notice 限定语。
CPS Pointer 限定语包含一个 CA 发布的 CPS(Certification Practice Statement),指示字的形式为 URI。
User notice有两种可选字段:noticeRef字段和 explicitText字段。NoticeRef字段命名一个团体。并通过记数识别该团体所做的一个专用文本声明。ExplicitText字段在证书内直接包括文本声明,该字段是一个最多含有200字符的串。如果noticeRef和explicitText选项都在同一个限定语中,且如果应用软件可以找出电noticeRef选项指明的通知文本,则应展示该文本,否则应展示explicitText串。
本扩展只用于CA证书。它列出一个或多个OID对,每对包括一个issuerDomainPolicy 和一个subjectDomainPolicy。这种成对形式表明,发行方 CA认为其issuerDomainPolicy 与主体 CA的 sub-jectDomainPolicy是等效的。发行方CA的用户可以为某应用接收一个issuerDomainPolicy。策略映射告知发行方CA的用户,哪些同CA有关的策略可以与他们接收到的策略是等效的。此项定义如下:
id-ce-policyMappings OBJECT IDENTIFIER ::={id-ce 33 }
PolicyMappingsSyntax::=SEQUENCE SIZE(1..MAX)OF SEQUENCE {
issuerDomainPolicy CertPolicyld,
subiectDomainPolicy CertPolicyld
}
策略不会被映射到或来自特殊的值anyPolicy。
该扩展可由CA和/或应用支持。证书签发者可以将该扩展选择为关键或非关键的。本标准推荐为关键的,否则一个证书用户就不能正确解释发布的CA设定的规则。
注1:政策映射的一个例子如:美国政府可有一个称之为加拿大贸易的政策,加拿大政府可有一个称之为美国贸易的政策。当两个政策可有区别地被标识并被定义时,两国政府之间可有个协定:就相关的用途,在两个政策所隐含的规则之内,允许认证路径延伸过境。
注2:政策映射意味着作出有关决策时会耗费显著的管理开销和涉及相当大的劳动和委任人员。一般而言,最好的办法是同意使用比应用政策映射更广的全球的公共政策。在上述例子中,美国,加拿大和墨西哥同意一项公共政策,用于北美贸易将是最好的。
注3:预计政策映射实际上只能用于政策声明非常简单的有限环境。
本项包含一个或多个可选替换名(可使用多种名称形式中的任一个)供实体使用,CA把该实体与认证的公开密钥绑定在一起。
主体可选替换名扩展允许把附加身份加到证书的主体上。所定义的选项包括因特网电子邮件地址、DNS名称、IP地址和统一资源标识符(URI)。还有一些纯本地定义的选项。可以包括多名称形式和每个名称形式的多个范例。当这样的身份被附加到一个证书中时,应使用主体选择名称或颁发者选择名称扩展。由于主体可替换名被认为是与公钥绑在一起的,主体可选替换名的所有部分应由CA认证。此项定义如下:
id-ce-subjectAltName OBJECT IDENTIFIER := id-ce 17
SubjectAltName ::= GeneralNames
GeneralNames ::= SEQUENCE SIZE(1..MAX) OF GeneralName
GeneralName ::= CHOICE {
otherName [0] OtherName,
rfc822Name [1] IA5String,
DNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
IPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER
}
OTHERNAME ::= SEQUENCE {
type-id OBJECT IDENTIFIER,
value [0] EXPLICIT ANY DEFINED BY type-id
}
EDIPartyName ::= SEQUENCE {
nameAssigner [0] DirectoryString OPTIONAL,
partyName [1] DirectoryString
}
GeneralName类型中可替换的值是下列各种形式的名称:
CA不应签发带有subiectAltNames却包含空GeneralName项的证书。如果证书中的唯一主体身份是一个选择名称格式(如一个电子邮件地址),则主体的甄别名应是空的(一个空序列),且subjiectAltName扩展应存在。如果主体字段包括一个空序列,则subiectAltName 扩展应标识为关键性的如果出现subiectAltName扩展,则序列应至少包含一个条目。
对GeneralName类型中使用的每个名称形式"应有一个名称注册系统,以保证所使用的任何名称能向证书颁发者和证书使用者无歧义地标识一个实体。
此扩展可以是关键的或非关键的,由证书签发者选择。不要求支持此扩展的实现能处理所有名称形式。如果此扩展标记为关键的,那么,至少应能识别和处理存在的名称形式之一,否则,应认为此证书无效。除先前的限制以外,允许证书使用系统不理睬具有不能识别的或不被支持的名称形式的任何名称。倘若,证书的主体项包含无二义地标识主体的目录名称,推荐将此项标记为非关键的。
注1:TYPE-IDENTIFIER类别的使用在GB/T16262.2-2006的附录A和附录C中述。
注2:如果存在此扩展并标记为关键的,证书的subiect项可以包含空名称(例如,相关可甄别名的一个“0”序列),在此情况下,主体只能用此扩展中的名称或一些扩展名称来标识。
此项包含一个或多个替换名称(可使用多种名称形式中的任一个),以供证书或CRL,颁发者使用此项定义如下:
id-ce-issuerAltName OBJECT IDENTIFIER ::={ id-ce 18 }
IssuerAltName ::= GeneralNames
此项可以是关键的或非关键的,由证书或CRL颁发者选择。不要求支持此扩展的实际应用能处理所有名称形式。如果此扩展标记为关键的,那么至少应能识别和处理存在的名称形式之一,否则,应认为此证书无效。除先前的限制以外,允许证书使用系统不理睬具有不能识别的或不支持的名称形式的任何名称。倘若,证书或CRL的颁发者项包含了一个明确标识颁发机构的目录名称,推荐将此项标记为非关键的。
如果存在此扩展,并标记为关键的,证书或CRL的issuer项可以包含空名称(例如,对应可甄别名个“0”序列),在此情况下,颁发者只能用名称或此扩展中的一些名称来标识。的
本项为证书主体传送其期望的任何目录属性值。此项定义如下:
id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 }
SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX )OF Attribute
AttributesSyntax ::= SEQUENCE SIZE(1..MAX) OF Attribute
该扩展总是非关键的
本扩展项用来标识证书的主体是否是一个CA,通过该CA可能存在的认证路径有多长。此项定义如下:
id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }
BasicConstraintsSyntax ::= SEQUENCE {
CA BOOLEAN DEFAULT FALSE,
pathlenConstraint INTEGER(0..MAX)OPTIONAL
}
CA字段标识此公钥证书是否可用来验证证书签名。
PathLenConstraint字段仅在CA设置为TRUE时才有意义。它给出此证书之后认证路径中最多的CA证书数目。0值表明在路径中只可以向终端实体签发证书,而不可以签发下级CA证书。Path-L.enConstraint 字段出现时应大于或等于0。如果在认证路径的任何证书中未出现 pathlenConstraint字段,则对认证路径的允许长度没有限制。
CA证书中应包括本扩展,而且应是关键的,否则,未被授权为CA的实体可以签发证书,同时证书使用系统会在不知情的情况下使用这样的证书。
如果此扩展存在,并标记为关键的,那么:
a)如果CA字段的值置为FALSE,则密钥用法不能包含 keyCertSign这一用法,其公开密钥应不能用来验证证书签名:
b)如果CA字段的值置为TRUE,并目pathLenConstraint存在,则证书使用系统应检查被处理的认证路径是否与pathLenConstraint的值一致。
注1:如果此扩展不存在或标记为非关键项的并且未被证书使用系统认可,该证书被系统视为终端用户证书,并且不能用来验证证书签名,
注2:为限制一证书主体只是一个端实体,即,不是CA,颁发者可以在扩展中只包含一个空SEQUENCE值的护展项。
本项应只用于CA证书,它指示了一个名称空间,在此空间设置了认证路径中后续证书中的所有主体名称。此项定义如下:
id-ce-nameConstraints OBJECT IDENTIFIER ::= {id-ce 30}
NameConstraintsSyntax ::= SEQUENCE {
permittedSubtrees [0] GeneralSubtrees OPTIONAL,
excludedSubtrees [1] GeneralSubtrees OPTIONAL
}
GeneralSubtrees::=SEQUENCE SIZE (1..MAX)OF GeneralSubtree
GeneralSubtree::=SEQUENCE {
base GeneralName,
minimum [0] BaseDistance DEFAULT 0,
maximum [1] BaseDistance OPTIONAL
}
BaseDistance::=INTEGER(0..MAX)
如果存在 permittedSubtrees和excludedSubtrees字段,则他们每个都规定一个或多个命名子树每个由此子树的根的名称或以任选处于其子树内的任意节点名称来定义,子树范围是一个由上界和/或下界限定的区域。如果permitedSubtrees存在,由主体CA和认证路径中下级CA颁发的所有证书中,只有那些在子树中具有与permittedSubtrees字段规定主体名称相同的证书才是可接受的。如果excludedSubtrees存在,由主体CA或认证路径中后继的CA颁发的所有证书中,同excludedSubtrees规定主体名称相同的任何证书都是不可接受的。如果PermittedSutrees和excluded Subtrees 都存在并且名称空间重叠,则优先选用排斥声明(exclusionstatement)
通过GeneralName字段定义的命名格式,需要那些具有良好定义的分层结构的名称形式用于这些字段,Directory Name名称形式满足这种要求;使用这些命名格式命名的子树对应于DIT子树。在应用中不需要检查和识别所有可能的命名格式。如果此扩展标记为关键项,并且证书使用中不能识别用于base项的命名格式,应视同遇到未识别的关键项扩展那样来处理此证书。如果此扩展标记为非关键的,并且证书使用中不能识别用于base项的命名格式,那么,可以不理睬此子树规范。当证书主体具有同一名称形式的多个名称时(在directoryName名称形式情况下,包括证书主体项中的名称,如果非“0”),那么,对与此名称形式的名称限制一致性而言应检验所有这些名称。
可以对主体名称或主体选择名称进行限制。只有当确定的名称格式出现时才应用限制。如果证书中没有类型的名称,则证书是可以接受的。当对于命名格式限制的一致性测试证书主体名称时,即使护展中标识为非关键项也应予以处理。
Minimum 字段规定了子树内这一区域的上边界。最后的命名形式在规定的级别之上的所有名称不包含在此区域内。等于“0”(默认)的 minimum值对应于此基部(base),即,子树的顶节点。例如,如果minimum置为“1”,则命名子树不包含根节点而只包含下级节点。
Maximun字段规定了子树内这一区域的下边界。最后的命名形式在规定的级别之下所有名称不包含在此区域内。最大值“0”对应于此基部(base),即,子树的顶。不存在的maximun 字段指出不应把下限值施加到子树内的此区域上。例如,如果 maximun 置为“1”,那么,命名子树不包含除子树根节点及其直接下级外的所有节点。
本标准建议将它标记为关键项,否则,证书用户不能检验认证路径中的后续证书是否位于签发CA指定的命名域中。如果此扩展存在,并标记为关键的,则证书用户系统应检验所处理的认证路径与此扩展中的值是否-致
本标准中,任何名称格式都不使用最小和最大字段,最小数总为0,最大数总是空缺的
策略限制扩展用于向CA颁发的证书中。本扩展以两种方式限制路径确认。它可以用来止策略映射或要求路径中的每个证书包含一个认可的策略标示符。本项定义如下:
id-ce-policyConstraints OBJECT IDENTIFIER ::={ id-ce 36 }
PolicyConstraints::=SEQUENCE {
requireExplicitPolicy [0] SkipCerts OPTIONAL,
inhibitPolicyMapping [1] SkipCerts OPTIONAL
}
SkipCerts::=INTEGER(0..MAX)
如果reguireExplicitPolicy字段存在,并且证书路径包含一个由指定CA签发的证书,所有在此路径中的证书都有必要在证书扩展项中包含合适的策略标识符。合适的策略标识符是由用户在证书策略中定义的标识符,或声明通过策略映射与其等价的策略的标识符。指定的CA指包含此扩展信息的认证机构(如果requireExplicitpolicy的值为“0”)或是认证路径中后续认证机构CA(由非“0”值指示的)。
如果inhibitPolicyMapping字段存在,它表明在认证路径中从所指定的CA开始直到认证路径结束为止的所有证书中,不允许策略映射。指定的CA指包含此扩展信息的认证机构(如果inhibitPolicy-Mapping的值为“0”)或是认证路径中后续认证机构CA(由非“0”值指示的)。
SkipCerts类型的值表示在某一限制成为有效之前应在认证路径中需要跳过的证书的个数。
此扩展由证书签发者选择是关键的还是非关键的。证书签发者宜标记为关键的,否则证书用户可能不能正确地解释认证机构CA设定的规则。
CRL分发点扩展用来标识如何获得CRL信息,本扩展仅作为证书扩展使用。它可用于认证机构证书,终端实体公钥证书以及属性证书中。本项指定了CRI,分发点或证书用户的查阅点以确定证书是否已被撤销。证书用户能从可用分发点获得一个CRL,或者它可以从认证机构目录项获得当前完整的 CRL。
该项定义如下:
id-ce-CRLDistributionPoints OBJECT IDENTIFIER ::={id-ce 31 }
cRLDistributionPoits::= {CRLDistPointsSyntax}
CRLDistPointsSyntax::=SEQUENCE SIZE(1..MAX) OF DistributionPoint
DistributionPoint::=SEQUENCE {
distributionPoint [0] DistributionPointName OPTIONAL,
reasons [1] ReasonFlags OPTIONAL,
cRLIssuer [2] GeneralNames OPTIONAL
}
DistributionPointName::=CHOICE {
fullName [2] GeneralNames,
nameRelativeToCRLIssuer [1] RelativeDistinguishedName
}
ReasonFlags::=BITSTRING{
unused (0),
keyCompromise (1),
CACompromise (2),
affiliationChanged (3),
superseded (4),
cessationOfOperation (5),
certificateHold (6)
}
distributionPoint字段标识如何能够获得CRL,的位置。如果此字段缺省,分发点名称默认为 CRL颁发者的名称。
当使用fulName替代名称或应用默认时,分发点名称可以有多种名称形式。同一名称(至少用其名称形式之一)应存在于颁发 CRL,的分发点扩展的 distrubutionPoint字段中。不要求证书使用系统能处理所有名称形式。它可以只处理分发点提供的诸多名称形式中的一种。如果不能处理某一分发点的任何名称形式,若能从另一个信任源得到必要的撤销信息,例如另一个分发点或CA目录项,则证书应用系统仍能使用该证书。
如果CRI,分发点被赋于一个直接从属于CRL,颁发者的目录名称的目录名,则只能使用nameRel-ativeToCRLIssuer 字段。此时,nameRelativeToCRLIssuer 字段传送与 CRL,颁发者目录名称有关的可甄别名。
Reasons字段指明由此CRI,所包含的撤销原因。如果没有reasons字段,相应的CRL,分发点发布包含此证书(如果此证书已被撤销)的项的CRL,而不管撤销原因。否则,reasons值指明相应的CRL分发点所包含的那些撤销原因。
CRLIssuer字段标识颁发和签署CRL的机构。如果没有此字段,CRL颁发者的名称默认为证书签发者的名称。
此扩展可以是关键的或非关键的,由证书颁发者选择,建议该扩展设置为非关键的,但CA和应用应支持该扩展。如果该扩展标记为关键,CA则要保证分发点包含所用的撒销原因代码keyCompromise和/或CACompromise。若没有首先从一个包含了原因代码 keyCompromise(对终端实体证书)或CACompromise(对CA证书)的指定的分发点检索和核对CR,证书使用系统将不使用该证书。在分配点为所有撤销原因代码和由CA(包括作为关键扩展的CRLDistributionPoint)发布的所有证书分配CRL信息的项中,CA不需要在CA项发布一个完整的CRL。
如果此扩展标记为非关键的,当证书使用系统未能识别此扩展项类型时,则只有在下列情况中,该系统使用此证书:
a)它能从CA获得一份完整CRL并检查它(通过在CRL中设有发布点扩展项来指示最近的CRL是完整的):
b)根据本地策略不要求撤销检查;或
c)用其他手段完成撤销检查。
注1:一个以上的CRL分发者对应一个证书CRL,签发者是可能的。这些CRL分发者和签发CA的协调是CA策略的一个方面。
注2:证书撤销列表CRL的应用,参照RFC5280。
本扩展指定了一个限制,它指出了任何策略,对于从指定CA开始的认证路径中的所有证书的证书策略,都认为不是显式匹配。指定的CA要么是包含这个扩展的证书的主体CA(如果inhitanyPolicy值为0),要么是认证路径(由非0值指定)中后继认证机构CA。
id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::={
id-ce 54
}
InhibitAnyPolicy ::=SkipCerts
SkipCerts ::= INTEGER(0..MAX)
本扩展由证书颁发者选择关键项还是非关键项。建议它标记为关键项,否则证书用户可能不能正确地解释认证机构CA设定的规则。
最新CRL扩展只被作为证书扩展使用,或在发给认证机构和用户的证书中使用。该项标识了CRL,对CRL来说证书用户应包含最新的撤销信息(例如:最新的dCRL)。
该项定义如下:
id-ce-CRLfreshestCRL OBJECT IDENTIFIER ::={id-ce 46}
freshestCR l::= { CRLDistPointsSyntax }
根据证书颁发者的选择,这个扩展可能是关键的,也可能是非关键的。如果最新的CRL,扩展是关键的,那么证书使用系统不使用没有首先进行撤销和核对的最新CRL的证书。如果扩展被标记为不关键的,证书使用系统能使用本地方法来决定是否需要检查最新的CRL。
个人身份证号码用于表示个人身份证件的号码,其定义如下:
id-ldentifyCode OBJECT IDENTIFIER ::={
1.2.156.10260.4.1.1
}
IdentifyCode ::=SET {
residenterCardNumber [0] PrintableString OPTIONAL,
militaryOfficer [1] UTF8String OPTIONAL,
CardNumberpassportNumber [2] PrintableString OPTIONAL.
...
此扩展项标记为非关键的
个人社会保险号扩展项用于表示个人社会保险号码,其定义如下:
ID-InsuranceNumber OBJECT IDENTIFIER ::= {
1.2.156.10260.4.1.2
}
InsuranceNumber::=PrintableString
此扩展项标记为非关键的。
企业工商注册号扩展项用于表示企业工商注册号码,其定义如下:
ID-ICRegistrationNumber OBJECT IDENTIFIER ::={
1.2.156.10260.4.1.3
}
ICRegistrationNumber::=PrintableString
此扩展项标记为非关键的。
企业组织机构代码号扩展项用于表示企业组织机构代码,其定义如下:
ID-OrganizationCode OBJECT IDENTIFIER ::={
1.2.156.10260.4.1.4
}
OrganizationCode::=PrintableString
此扩展项标记为非关键的。
企业税号扩展项用于表示企业税号码,其定义如下:
ID-TaxationNumeber OBJECT IDENTIFIER ::= {
1.2.156.10260.4.1.5
}
TaxationNumeber::=PrintableString
此扩展项标记为非关键的。
5.2.4.3定义了两个应用于因特网公钥基础结构(PKI)的新扩展,用于指导应用以识别一个支持CA的在线验证服务。其对象标识符如下
id-pkix OBJECT IDENTIFIER::{
iso(1) identified-organization(3) dod (6) internet (1) security (5) mechanisms (5) pkix(7)
}
id-pe OBJECTIDENTIFIER ::= { id-pkix 1 }
每个扩展是一个IA5String值的序列,每个值分别代表一个URI。URI直接确定信息的位置和格式以及获得信息的方式。
本扩展项描述了包含该扩展的证书的签发者如何访问CA的信息以及服务。包括在线验证服务和CA策略数据。该扩展可包括在用户证书和CA证书中,且应为非关键的。
id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
AuthorityInfoAccessSyntax ::= SEQUENCE SIZE(1..MAX)OF AccessDescription
AccessDescription::=SEQUENCE {
accessMethod OBJECT IDENTIFIER,
accessLocation GeneralName
}
id-ad OBJECT IDENTIFIER ::=( id-pkix 48 }
id-ad-calssuers OBJECT IDENTIFIER ::={ id-ad 2}
id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
序列 AuthorityInforAccessSyntax中的每个人口描述有关颁发含有该扩展的证书的CA附加信息格式和位置。信息的类型和格式由accessMethod字段说明;信息的位置由accessLocation 字段说明检索机制可以由 accessMethod表明或由acessLocaion说明。
本标准定义用于 accessMethod的一个 OID。当附加的信息列出了发行证书的 CA高于发行该扩展的证书CA时,使用id-ad-calssuers OID。
当id-ad-calssuers 以 accessInfoType出现时,acessLocaion字段说明参考的描述服务器及获得参考描述的访问协议。AcessLocaion字段定义为GeneralName,它可有几种形式:当信息可以通过 http,ftp或 ldap获得时,acessLocaion应是一个 uniformResourceldentifier 类型。当信息可以通过目录访问协议获得时,acessocaion应是一个directoryName类型。当信息可以通过电子邮件获得时,acessLo-caion应是一个rfc822Name类型。
本扩展描述了证书主体如何访问信息和服务。如果主体是CA,则包括证书验证服务和CA策略数据,主体是用户,则描述了提供的服务的类型以及如何访问它们,在这种情况下,扩展域/项中的内容在所支持的服务的协议的说明中定义。这个扩展项应被定义为非关键的。
id-pe-SubjectInformationAccess OBJECT IDENTIFIER ::={ id-pe 1l }
SubjectInfoAccessSyntax::=
SEQUENCE SIZE(1..MAX) OF AccessDescription
AccessDescription ::= SEQUENCE {
accessMethod OBIECT IDENTIFIER.
accesslocation GeneralName
}
另外附录A中规定了证书的结构,附录B中列举出数字证书结构实例,并制定了数据项的关键程度,附录C中规定了证书撤销列表内容表,附录D中提供了数字证书编码举例。
本标准采用GB/T16262.1-2006的特定编码规则(DER)对下列证书撤销列表项中的各项信息进行编码,组成特定的证书撤销列表数据结构。ASN.1DER编码是关于每个元素的标记、长度和值的编码系统。
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 三个域构成。这些域的含义如下:
AlgorithmIdentifier::=SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
c)signatureValue域包含了对tbsCertlist域进行数字签名的结果。采用ASN.1 DER编码的 tbsCertlist 作为数字签名的输入,而签名的结果则按照ASN,1编码成BITSTRING 类型并保存在CRL签名值域内。如果签名算法为SM2,SM2密码算法签名数据格式见GB/T 35276
本可选项描述了编码CRL的版本号。如果使用了Extensions项,则应存在此项,目其值应是ver-sion2(用整数1表示)
本项包含CA签发该CRL所使用的密码算法的标识符,这个算法标识符应与Certificatelist中signatureAlgorithm项的算法标识符相同。使用国家密码管理主管部门审核批准的相关算法。
5.3.3.3 颁发者issuer
本项标识了签名和颁发 CRL,的实体。它应包含一个非空的甄别名称(DN-distinguished name)。该项被定义为Name类型。
Issuer 的编码规则同 5.2.3.4。
本项标明了CRL的颁发日期,使用UTCTime or GeneralizedTime 编码。
遵循本标准的CRL颁发者在2049年之前(包括2049年)应将该时间编码为UTCTime类型,在2050年之后,编码为GeneralizedTime类型。
UTCTime的编码规则同5.2.3.5.3.
GeneralizedTime的编码规则同5.2.3.5.4
本项标明了下一次CRL将要发布的时间。下一次CRL可以在此时间前签发,但不能晚于此时间签发。使用 UTCTime or GeneralizedTime 编码。
遵循本标准的CRL颁发者应在签发的CRL中包含nextUpdate项。遵循本标准的CRL颁发者在2049年之前(包括2049年)应将该时间编码为UTCTime类型,在2050年之后,编码为GeneralizedTime 类型。
UTCTime的编码规则同5.2.3.5.2。
GeneralizedTime的编码规则同5.2.3.5.3。
该域标明被撤销的证书序列号、撤销时间和撤销原因。
如果没有被撤销的证书,此项不存在。否则,列出被撤销证书的序列号,并指定撤销的日期。
该域只可在version2出现。如果出现,此项由一个或多个CRL扩展的序列组成crlExtensions在5.3.4 描述
颁发机构密钥标识符扩展提供了一种方式,以识别与CRL,签名私钥相应的公钥。当颁发者由于有多个密钥共存或由于发生变化而具有多个签名密钥时使用该扩展。识别可基于颁发者的主体密钥标识符或基于颁发者的名称和序列号。
本项包含一个或多个替换名称(可使用多种名称形式中的任一个),以供CRL,颁发者使用。
证书撤销列表号是一个非关键的CRL扩展,表示在给定的CRL颁发者和CRL范围内一个单调递增序列。这个扩展可以让用户方便地确定一个特定的CRL,何时取代另一个CRL。证书撤销列表号也支持鉴别一个附件的完整CRL和增量CR。
如果CRL颁发者在一个特定范围内除了生成完整CRL外,还生成增量CRL,完整CRL,和增量CRL,应共享同一个编号序列。如果完整CRL和增量CRL在同一时间颁发,它们应使用相同的证书撤销列表号,并提供相同的撤销信息。
如果CRL,颁发者在一个特定范围内的不同时间生成两个CRL(两个完整CRL,两个增量CRL,或者一个完整 CRL和一个增量CRL),这两个CRL,不能使用相同的证书撤销列表号。也就是说,如果两个CR的thisUpdate 域不同,证书撤销列表号应不同。
CRL号可以使用长整数。CRL验证者应能够处理20字节的证书撤销列表号。遵循本标准的CRL颁发者应不使用大于20字节的证书撤销列表号。
id-ce-cRLNumber OBJECTIDENTIFIER ::= { id-ce 20 }
CRLNumber ::=INTEGER(0..MAX)
增量证书撤销列表指示是一个关键CRL扩展,表明一个CRL是增量CRL。增量CRL包含上次发布之后的撤销信息,而不是将所有的撤销信息包含在一个完整CRL,里。在一些环境里使用增量CRL可以显著减少网络流量和处理时间。
增量证书撤销列表指示扩展包含一个类型为BaseCRLNumber 的单一值。证书撤销列表号标识了此增量 CRL使用的起始CRL。遵循本标准的CRI,颁发者应将参考基准CRL颁发为完整CRL。增量CRL,包含所有的更新撤销状态。增量CRL和参考基准CRL,的组合与完整CRI是等效的。
当遵循本标准的CRL颁发者生成增量CRL,此增量CRL,应包含一个关键的增量证书撤销列表指示扩展项。
id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::={ id-ce 27 }
BaseCRLNumber ::=CRLNumber
颁发分发点是一个关键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
}
最新证书撤销列表扩展项表明完整CRI的增量CRL信息如何获取。遵循本标准的CRL颁发者应将此项标记成非关键。此项不在增量CRL中出现。
最新证书撤销列表扩展项的格式和数字证书的cRlDistributionPoints扩展项相同。但是,该最新证书撤销列表扩展项中分发点域是有意义的;同时Reasons和cRLIssuer域应略去。
id-ce-freshestCRL OBJECT IDENTIFIER ::=(id-ce 46 }
FreshestCRL::=CRLDistributionPoints
原因代码为非关键扩展,表明证书撤销的原因,
代码 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)
}
撤销时间是个非关键扩展,表明知道或怀疑私钥泄露或证书失效的时间。该域包含的 GeneralizedTime应使用格林威治标准时间,应按照5.2.3.5.3的要求表示
id-ce-invalidityDate OBJECT IDENTIFIER ::= {id-ce 24 }
InvalidityDate ::GeneralizedTime
如果存在,证书颁发者扩展包含一个或多个和CRL,条目对应的,从证书的颁发者域和/或颁发者替换名称域得到的名字。
OBJECT IDENTIFIER ::=id-ce 29 }id-ce-certificatelssuerCertificatelssuer ::GeneralNames
附录C规定了证书撤销列表内容。
在国内,数字证书应优先使用国家密码管理主管部门公布的SM2和SM3等算法,参见附录E。目前国际上的数字证书可支持多种密码算法,如杂凑算法SHA-256,签名算法RSA等。
证书的构成见表A.1。
表 A.1 证书结构
项名称 | 描述 |
---|---|
TBSCertificate | 基本证书域 |
signatureAlgorithm | 签名算法域 |
signature Value | 签名值域 |
基本证书域见表A.2。
项名称 | 描述 | 备注 |
---|---|---|
version | 版本号 | |
serialNumber | 序列号 | |
signature | 签名算法 | |
issuer | 颁发者 | |
validity | 有效日期 | |
subject | 主体 | |
subjectPublicKeyInfo | 主体公钥信息 | |
issuerUniqueID | 颁发者唯一标识符 | 本标准中不使用 |
subjectUniqueID | 主体唯一标识符 | 本标准中不使用 |
extensions | 扩展项 | 按本标准的扩展项进行定义,参考 A.3 |
标准的扩展域见A.3。
名称 | 描述 | 关键度 |
---|---|---|
authorityKeyIdentifier | 机构密钥标识符 | 非关键 |
subjectKeyIdentifier | 主体密钥标识符 | 非关键 |
keyUsage | 密钥用法 | 双证书标记为关键,单证书标记为非关键 |
extKeyUsage | 扩展密钥用途 | 如果密钥的用法只限于所指示的用途时标记为关键,否则标记为非关键 |
privateKeyUsagePeriod | 私有密钥使用期 | 非关键 |
certificatePolicies | 证书策略 | 非关键 |
policyMappings | 策略映射 | 如果证书用户需要正确解释发布的CA设定的规则时标识为关键,否则标识为非关键 |
subjectAltName | 主体可选替换名称 | 非关键 |
issuerAltName | 颁发者可选替换名称 | 非关键 |
subjectDirectoryAttributes | 主体目录属性 | 非关键 |
basicConstraints | 基本限制 | CA证书标记为关键,终端实体证书标记为非关键 |
nameConstraints | 名称限制 | 如果证书用户系统应检验所处理的认证路径与此扩展中的值是否一致时标记为关键,否则标记为非关键 |
policyConstraints | 策略限制 | 如果证书用户需要正确地解释认证机构CA设定的规则时标识为关键,否则标识为非关键 |
CRLDistributionPoints | CRL分发点 | 非关键 |
inhibitAnyPolicy | 限制所有策略 | 如果证书用户需要正确地解释认证机构CA设定的规则时标识为关键,否则标识为非关键 |
freshestCRL | 最新的CRL | 非关键 |
id-pkix | 私有的Internet扩展 | 非关键 |
authorityInfoAccess | 机构信息访问 | 非关键 |
SubjectInformationAccess | 主体信息访问 | 非关键 |
IdentifyCardNumber | 个人身份证号码 | 非关键 |
InuranceNumber | 个人社会保险号 | 非关键 |
ICRegistrationNumber | 企业工商注册号 | 非关键 |
名称 | 描述 | |
---|---|---|
version | 版本号 | |
serialNumber | 证书序列号 | |
signature | 签名算法标识符 | |
issuer | 颁发者名称 | |
validity | 有效期 | 起始有效期 |
validity | 有效期 | 终止有效期 |
subject | 主体名称 | 国家 |
subject | 主体名称 | 省份 |
subject | 主体名称 | 地市 |
subject | 主体名称 | 组织名称 |
subject | 主体名称 | 机构名称 |
subject | 主体名称 | 用户名称 |
subjectPublicKeyInfo | 主体公钥信息 | |
authorityKeyIdentifier | 颁发机构的密钥标识 | |
subjectKeyIdentifier | 主体密钥标识符 | |
CRLDistributionPoints | CRL分发点 |
表B.2 服务器证书的结构实例
名称 | 描述 | |
---|---|---|
version | 版本号 | |
serialNumber | 证书序列号 | |
signature | 签名算法标识符 | |
issuer | 颁发者名称 | |
validity | 起始有效期 | |
validity | 有效期 | |
validity | 终止有效期 | |
subject | 主体名称 | 国家 |
subject | 主体名称 | 省份 |
subject | 主体名称 | 地市 |
subject | 主体名称 | 组织名称 |
subject | 主体名称 | 机构名称 |
subject | 主体名称 | 服务器名称 |
subjectPublicKeyInfo | 主体公钥信息 | |
authorityKeyIdentifier | 颁发机构的密钥标识 | |
subjectKeyIdentifier | 主体密钥标识符 | |
CRLDistributionPoints | CRL分发点 |
本附录包含一系列证书内容表。每一个表列出了一个特别类型证书或证书撤销列表的证书内容在PKI体系中将被广泛支持的可选特征也被识别,这些属性将包含在签发者属性中。在实际应用中证书和证书撤销列表中可能还会包括局部应用中非严格扩展等其他信息,但是通用的PKI客户端将不会去处理这些额外信息。另外,对于未列在工作表中的关键扩展,不允许在中国的PKI证书或证书撤销列表内容中使用。
以下证书内容表是:
a)自签名CA证书内容表,即根证书内容工作表,它定义自我签名证书强制和可选的内容。当确认一个信任根时,PKI体系中的CA发布自签名证书;
b)二级CA证书内容表,它定义了二级CA证书的强制和可选内容;
c)终端实体签名证书内容表,它定义了由PKI体系中CA颁发的实体签名证书的强制和可选内容,其对象是一个终端实体,其私钥用于签名,其公钥将用来验证签名,该证书的密钥对签发时在客户端生成,为用户所私有,其私钥在终端介质中应该不可导出;
d)终端实体加密证书内容表,它定义了由PKI体系中CA颁发的实体加密证书的强制和可选内容。其公钥用于加密数据,私钥用于解密数据。密钥由密钥管理中心(KM)分发,其生命周期受密钥管理中心控制,在证书有效期间,在介质损坏的情况下,可以通过正常的流程通过CA中心进行恢复;
e)证书撤销列表内容表,它定义了由证书撤销列表签发者发布的证书撤销列表的强制和可选内容。
对于终端实体签名证书和加密证书,它们应该总是成对出现,其生命周期由CA中心进行管理。对于双用途终端实体证书(即既用作签名,又用于加密的单张终端实体证书),由于其安全和可管理性存在问题,因此不建议使用。
自签名CA证书内容表见表C.1。