机构密钥标识符扩展提供了一种方式,以识别与证书签名私钥相对应的公钥。当发起方由于有多个密钥共存或由于发生变化而具有多个签名密钥时使用该扩展。识别可基于发起方证书中的主题密钥标识符或基于发起方的名称和序列号。
相应CA产生的所有证书应包括authorityKeyIdentifier扩展的keyIdentifier项,以便于证书信任链的建立。CA以“自签”(self-signed )证书形式发放其公钥时,可以省略认证机构密钥标识符。此时,主题和认证机构密钥标识符是完全相同的。
本项既可用作证书扩展亦可用作CRL扩展。本项标识用来验证在证书或CRL上签名的公开密钥。它能辨别同一CA使用的不同密钥(例如,在密钥更新发生时)。本项定义如下: id-ce-authorityKeyIdentifier OBJECTIDENTIFIER ::= {id-ce 35}
AuthorityKeyIdentifier ::= SEQUENCE {
keyIdentifier [0] KeyIdentifier OPTIONAL, authorityCertIssuer [1] GeneralNames OPTIONAL,
authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } (WITH COMPONENTS {…,authorityCertIssuer authorityCertSerialNumber PRESENT} │ WITH COMPONENTS {…,authorityCertIssuer
PRESENT,
ABSENT,
authorityCertSerialNumber ABSENT}) KeyIdentifier ::= OCTET STRING。
KeyIdentifier项的值应从用于证实证书签名的公钥导出或用产生唯一值的方法导出。公开密钥的密钥标识符KeyIdentifier可采用下述两种通用的方法生成:
a) keyIdentifier由BIT STRING subjectPublicKey值的160-bit SHA-1散列值组成(去
掉标签、长度和不使用的字节数目)。
b) keyIdentifier 由0100加上subjectPublicKey值的SHA -1散列值中最低位的60比特
组成。
此密钥可以通过keyIdentifier字段中的密钥标识符来标识,也可以通过此密钥的证书标识(给出authorityCertIssur字段中的证书颁发者以及authorityCertSerialNumber字段中的证书序列号)来标识,或者可以通过密钥标识符和此密钥的证书标识来标识。如果使用两种标识形式,那么,证书或CRL的颁发者应保证它们是一致的。对于颁发机构包含扩展的证书或CRL的所有密钥标识符而言,每个密钥标识符应该是唯一的。不要求支持此扩展的实现能够处理authorityCertIssuer字段中的所有名字形式。
认证机构指定或者自动产生证书序列号,这样颁发者和证书序列号相结合就唯一地标识了一份证书。
除自签证书之外,所有的证书必须包含本扩展,而且要包含keyIdentifier项。如果证书颁发者的证书有SubjectKeyIdetifier扩展,则本扩展中keyIdentifier项必须与颁发者的证书的SubjectKeyIdetifier扩展的值一致,如果证书颁发者的证书没有SubjectKeyIdetifier扩展,则可以使用以上介绍的两种方法之一来产生。
结构中的keyIdentifier,authorityCertSerialNumber扩展建议为必选,但本扩展必须是非关键的。
5.1.2.2.2 主题密钥标识符 subjectKeyIdentifier
本项提供一种识别包含有一个特定公钥的证书的方法。此扩展标识了被认证的公开密钥。它能够区分同一主题使用的不同密钥(例如,当密钥更新发生时)。此项定义如下:
id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= {id-ce 14}
SubjectKeyIdentifier::=KeyIdentifier
7
对于使用密钥标识符的主题的各个密钥标识符而言,每一个密钥标识符均应是唯一的。此扩展项总是非关键的。 5.1.2.2.3 密钥用法keyUsage
本项说明已认证的公开密钥用于何种用途,该项定义如下: 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类型中的用法如下:
a) digitalSignature:验证下列b)、f)或g)所标识的用途之外的数字签名;
b) nonRepudiation:验证用来提供抗抵赖服务的数字签名,这种服务防止签名实体不
实地拒绝某种行为(不包括如f)或g)中的证书或CRL签名)。
c) keyEncipherment:加密密钥或其它安全信息,例如用于密钥传输。
d) dataEncipherment:加密用户数据,但不包括上面c)中的密钥或其它安全信息。 e) keyAgreement:用作公开密钥协商密钥。 f) keyCertSign:验证证书的CA签名。 g) CRLSign:验证CRL的CA签名。
h) EncipherOnly:当本比特与已设置的keyAgreement比特一起使用时,公开密钥协商
密钥仅用于加密数据(本比特与已设置的其他密钥用法比特一起使用的含义未定
义)。
i) DecipherOnly: 当本比特与已设置的keyAgreement比特一起使用时,公开密钥协
商密钥仅用于解密数据(本比特与已设置的其他密钥用法比特一起使用的含义未定义)。
keyCertSign只用于CA系统证书。如果KeyUsage被置为keyCertSign和基本限制扩展存在于同一证书之中,那么,此扩展的CA成分的值应被置为TRUE。CA系统还可使用keyUsag中定义的其他密钥用法比特,例如,提供鉴别和在线管理事务完整性的digitalSignature。
若缺少keyAgreement比特,则不定义encipherOnly比特的含义。若确定encipherOnly比特,且keyAgreement比特也被确定时,主题公钥可只用于加密数据,同时执行密钥协议。 若缺少keyAgreement比特,则不定义decipherOnly比特的含义。若确定decipherOnly比特,且keyAgreement比特也被确定时,主题公钥可只用于脱密数据,同时执行密钥协议。 所有的CA系统证书必须包括本扩展,而且必须包含keycertSign这一用法。此扩展可以定义为关键的或非关键的,由证书签发者选择。
如果此扩展标记为关键的,那么该证书应只用于相应密钥用法比特置为“1”的用途。 如果此扩展标记为非关键的,那么它指明此密钥的预期用途或其它多种用途,并可用于查找具有多密钥/证书实体的正确密钥/证书。它是一个咨询项,并不意指此密钥的用法限于
8
指定的用途。置为“0”的比特指明此密钥不是预期的这一用途。如果所有比特均为“0”,它指明此密钥预期用于所列用途之外的某种用途。
在应用中,使用该扩展项对证书类型进行区别,当设置了c)、d)、h)、i)比特中的一位时,表示该证书为加密证书;当设置了a)、b)比特中的一位时,表示该证书为签名证书。 5.1.2.2.4 扩展密钥用法extKeyUsage
本项指明已验证的公开密钥可以用于一种用途或多种用途,它们可作为对密钥用法扩展项中指明的基本用途的补充或替代。此项定义如下:
id-ce-extKeyUsage OBJECT IDENTIFIER :: {id-ce 37}
ExtKeyUsageSyntax ::=SEQUENCE SIZE (1‥MAX) OF KeyPurposeId
KeyPurposeId::=OBJECT IDENTIFIER
密钥的用途可由有此需要的任何组织定义。用来标识密钥用途的客体标识符应按照GB/T 17969.1-2000来分配。
由证书签发者确定此扩展是关键的或非关键的。
如果此扩展标记为关键的,那么,此证书应只用于所指示的用途之一。
如果此扩展标记为非关键的,那么,它指明此密钥的预期用途或其它用途,并可用于查找多密钥/证书实体的正确密钥/证书。它是一个咨询项,并不表示认证机构将此密钥的用法限于所指示的用途。然而,进行应用的证书仍然可以要求指明特定的用途,以便证书为此应用接受。
如果证书包含关键的密钥用途项和关键的扩展密钥项,那么,两个项应独立地处理,并且证书应只用于与两个项一致的用途。如果没有与两个项一致的用途,那么,此证书不能用于任何用途。
本规范定义下列密钥用途:
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 client鉴别
-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 } -将对象的散列值与同一时间源提供的时间绑定
-Key usage 比特可以与digitalSignature,nonRepudiation一致 id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 } -OCSP 应答签名
-Key usage 比特可以与digitalSignature,nonRepudiation一致 5.1.2.2.5 私有密钥使用期privateKeyUsagePeriod
9
本项指明与已验证的公开密钥相对应的私有密钥的使用期限。它只能用于数字签名密钥。此项定义如下:
id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER::={id-ce 16} PrivateKeyUsagePeriod::=SEQUENCE{
notBefore [0] GeneralizedTime OPTIONAL,
notAfter [1] GeneralizedTime OPTIONAL}
notBefore字段指明私有密钥可能用于签名的最早日期和时间。如果没有notBefere字段,就不提供有关私有密钥有效使用期何时开始的信息。NotAfter字段指明私有密钥可以用于签名的最迟日期和时间。如果没有notAfter字段,就不提供有关私有密钥有效使用期何时结束的信息。
这个扩展总是为非关键的。
注1:私有密钥有效使用期可以与证书有效性周期指明的已验证的公开密钥有效性不同。就数字签名密钥而言,签名的私有密钥使用期一般比验证公开密钥的时间短。
注2:数字签名的验证者想要检查直到验证时刻此密钥是否未被撤销,例如,由于密钥泄露,那么,在验证时,必须有包含公开密钥的有效证书。在公开密钥的证书期满之后,签名验证者不能依赖CRL验证机制来验证密钥是否有效。 5.1.2.2.6 主题可选替换名称subjectAltName
本项包含一个或多个可选替换名(可使用多种名称形式中的任一个)供实体使用,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 dNSName
[1]IA5String, [2]IA5String,
x400Address [3]ORAddress, directoryName [4]Name, ediPartyName [5]EDIPartyName, uniformResourceIdentifier [6]IA5String, iPAddress registeredID
[7]OCTET STRING, [8]OBJECT IDENTIFIER}
OTHERNAME ::=SEQUENCE { type-id OBJECT IDENTIFIER,
value [0] EXPLICIT ANY DEFINED BY type-id } EDIPartyName::=SEQUENCE{ nameAssigner [0] DirectoryString OPTIONAL,
10
partyName [1] DirectoryString } GeneralName类型中可替换的值是下列各种形式的名称:
otherName是按照OTHER-NAME信息客体类别实例定义的任一种形式的名称; rfc822Name是按照Internet RFC822定义的Internet电子邮件地址; dNSName 是按照RFC 1034定义的Internet域名;
x400Address是按照GB/T 16284.4-1996定义的O/R地址; directoryName是按照ISO/IEC 9594-2:2001定义的目录名称;
ediPartyName 是通信的电子数据交换双方之间商定的形式名称;nameAssigner成分标识了分配partyName中唯一名称值的机构;
uniformResourceIdentifier是按照Internet RFC1630定义的用于WWW的UniformRAesourceIdentifier,RFC1738中定义的URL语法和编码规则;
iPAddress是按照Internet RFC791定义的用二进制串表示的Internet Protocol地址; registeredID是按照GB/T 17969.1-2000对注册的客体分配的标识符。 CA系统不得签发带有subjectAltNames却包含空GeneralName项的证书。如果证书中的唯一主题身份是一个选择格式(如一个电子邮件地址),则主题的甄别名必须是空的(一个空序列),且subjectAltName扩展必须存在。如果主题字段包括一个空序列,则subjectAltName扩展必须标识为关键性的。如果出现subjectAltName扩展,则序列必须至少包含一个条目。
对GeneralName类型中使用的每个名称形式,应有一个名称注册系统,以保证所使用的任何名称能向证书颁发者和证书使用者无歧义地标识一个实体。
此扩展可以是关键的或非关键的,由证书签发者选择。不要求支持此扩展的实现能处理所有名称形式。如果此扩展标记为关键的,那么,至少应能识别和处理存在的名称形式之一,否则,应认为此证书无效。除先前的限制以外,允许证书使用系统忽略具有不能识别的或不被支持的名称形式的任何名称。倘若,证书的主题项包含无二义的标识主体的目录名称,推荐将此项标记为非关键的。
TYPE-IDENTIFIER类别的使用在GB/T 16262.2-2006的附录A和C中描述。 如果存在此扩展并标记为关键的,证书的subject项可以包含空名称(例如,相关可甄别名的一个“0”序列),在此情况下,主题只能用此扩展中的名称或一些扩展名称来标识。 5.1.2.2.7 颁发者可选替换名称issuerAltName
本项包含一个或多个可选替换名称(可使用多种名称形式中的任一个),以供证书或CRL颁发者使用。此项定义如下:
id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 }
IssuerAltName ::= GeneralNames 此项可以是关键的或非关键的,由证书或CRL颁发者选择。不要求支持此扩展的实际应用能处理所有名称形式。如果此扩展标记为关键的,那么至少应能识别和处理存在的名称形式之一,否则,应认为此证书无效。除先前的限制以外,允许证书使用系统忽略具有不能识别的或不支持的名称形式的任何名称。倘若,证书或CRL的颁发者项包含了一个明确标识颁发机构的目录名称,推荐将此项标记为非关键的。
如果存在此扩展,并标记为关键的,证书或CRL的issuer项可以包含空名称(例如,对应可甄别名的一个 “0”序列),在此情况下,颁发者只能用名称或此扩展中的一些名称来标识。签发者可选替换名称必须按5.1.2.2.6的说明进行编码。 5.1.2.2.8 主题目录属性subjectDirectoryAttributes
本项为证书主题传送其期望的任何目录属性值。定义如下:
11