4.2. Certificate Extensions (证书扩展)
4.1.2.9. Extensions (扩展字段)
此字段只能 (MUST) 在版本为3 (第4.1.2.1节) 时出现. 如果存在, 此字段是一个或多个证书扩展的序列 (SEQUENCE). 互联网PKI中证书扩展的格式和内容在第4.2节中定义.
4.2. Certificate Extensions (证书扩展)
为X.509 v3证书定义的扩展提供了将附加属性与用户或公钥关联以及管理CA之间关系的方法. X.509 v3证书格式还允许社区定义私有扩展以携带这些社区特有的信息. 证书中的每个扩展都被指定为关键 (critical) 或非关键 (non-critical). 如果使用证书的系统遇到它不识别的关键扩展或包含它无法处理的信息的关键扩展, 则该系统必须 (MUST) 拒绝该证书. 如果无法识别非关键扩展, 则可以 (MAY) 忽略它, 但如果识别, 则必须 (MUST) 处理它. 以下各节介绍互联网证书中使用的推荐扩展和信息的标准位置. 社区可能选择使用其他扩展; 但是, 在采用任何可能阻止在一般上下文中使用的关键扩展时, 应谨慎行事.
每个扩展包括一个OID和一个ASN.1结构. 当扩展出现在证书中时, OID作为extnID字段出现, 相应的ASN.1 DER编码结构是八位字节串extnValue的值. 证书禁止 (MUST NOT) 包含特定扩展的多个实例. 例如, 证书只能包含一个授权密钥标识符扩展 (第4.2.1.1节). 扩展包括布尔值critical, 默认值为FALSE. 每个扩展的文本指定符合此配置文件的CA的critical字段的可接受值.
符合标准的CA必须 (MUST) 支持密钥标识符 (第4.2.1.1节和第4.2.1.2节)、基本约束 (第4.2.1.9节)、密钥用途 (第4.2.1.3节) 和证书策略 (第4.2.1.4节) 扩展. 如果CA颁发subject字段为空序列的证书, CA必须 (MUST) 支持主体备用名称扩展 (第4.2.1.6节). 对其余扩展的支持是可选的 (OPTIONAL). 符合标准的CA可以 (MAY) 支持本规范中未标识的扩展; 提醒证书颁发者, 将此类扩展标记为关键可能会阻碍互操作性.
至少, 符合此配置文件的应用程序必须 (MUST) 识别以下扩展: 密钥用途 (第4.2.1.3节)、证书策略 (第4.2.1.4节)、主体备用名称 (第4.2.1.6节)、基本约束 (第4.2.1.9节)、名称约束 (第4.2.1.10节)、策略约束 (第4.2.1.11节)、扩展密钥用途 (第4.2.1.12节) 和禁止anyPolicy (第4.2.1.14节).
此外, 符合此配置文件的应用程序应该 (SHOULD) 识别授权和主体密钥标识符 (第4.2.1.1节和第4.2.1.2节) 以及策略映射 (第4.2.1.5节) 扩展.
4.2.1. Standard Extensions (标准扩展)
本节识别 [X.509] 中定义的用于互联网PKI的标准证书扩展. 每个扩展都与 [X.509] 中定义的OID相关联. 这些OID是id-ce弧的成员, 定义如下:
id-ce OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 29 }
4.2.1.1. Authority Key Identifier (授权密钥标识符)
授权密钥标识符扩展提供了一种识别与用于签署证书的私钥相对应的公钥的方法. 此扩展用于颁发者具有多个签名密钥的情况 (由于多个并发密钥对或由于转换). 识别可以 (MAY) 基于密钥标识符 (颁发者证书中的主体密钥标识符) 或颁发者名称和序列号.
符合标准的CA生成的所有证书中必须 (MUST) 包含authorityKeyIdentifier扩展的keyIdentifier字段, 以促进证书路径构建. 有一个例外; 当CA以"自签名"证书的形式分发其公钥时, 可以 (MAY) 省略授权密钥标识符. 自签名证书上的签名是使用与证书主体公钥关联的私钥生成的. (这证明颁发者同时拥有公钥和私钥.) 在这种情况下, 主体和授权密钥标识符将是相同的, 但证书路径构建只需要主体密钥标识符.
keyIdentifier字段的值应该 (SHOULD) 从用于验证证书签名的公钥派生, 或使用生成唯一值的方法. 从公钥生成密钥标识符的两种常用方法在第4.2.1.2节中描述. 当密钥标识符尚未预先建立时, 本规范建议 (RECOMMENDS) 使用这些方法之一生成keyIdentifiers, 或使用使用不同哈希算法的类似方法. 当密钥标识符已预先建立时, CA应该 (SHOULD) 使用预先建立的标识符.
此配置文件建议 (RECOMMENDS) 所有证书用户支持密钥标识符方法.
符合标准的CA必须 (MUST) 将此扩展标记为非关键 (non-critical).
id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 }
AuthorityKeyIdentifier ::= SEQUENCE {
keyIdentifier [0] KeyIdentifier OPTIONAL,
authorityCertIssuer [1] GeneralNames OPTIONAL,
authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
KeyIdentifier ::= OCTET STRING
4.2.1.2. Subject Key Identifier (主体密钥标识符)
主体密钥标识符扩展提供了一种识别包含特定公钥的证书的方法.
为了促进证书路径构建, 此扩展必须 (MUST) 出现在所有符合标准的CA证书中, 即所有包含基本约束扩展 (第4.2.1.9节) 且cA值为TRUE的证书. 在符合标准的CA证书中, 主体密钥标识符的值必须 (MUST) 是由此证书主体颁发的证书的授权密钥标识符扩展 (第4.2.1.1节) 的密钥标识符字段中放置的值. 执行证书路径验证时, 应用程序不需要验证密钥标识符是否匹配.
对于CA证书, 主体密钥标识符应该 (SHOULD) 从公钥派生或使用生成唯一值的方法. 从公钥生成密钥标识符的两种常用方法是:
(1) keyIdentifier由位串subjectPublicKey值的160位SHA-1哈希组成 (不包括标签、长度和未使用位的数量).
(2) keyIdentifier由一个四位类型字段 (值为0100) 后跟位串subjectPublicKey值的SHA-1哈希的最低有效60位组成 (不包括标签、长度和未使用位的数量).
其他生成唯一数字的方法也是可接受的.
对于终端实体证书, 主体密钥标识符扩展提供了一种识别包含应用程序中使用的特定公钥的证书的方法. 当终端实体从多个CA获得多个证书时, 主体密钥标识符提供了一种快速识别包含特定公钥的证书集的方法. 为了帮助应用程序识别适当的终端实体证书, 此扩展应该 (SHOULD) 包含在所有终端实体证书中.
对于终端实体证书, 主体密钥标识符应该 (SHOULD) 从公钥派生. 上面识别了从公钥生成密钥标识符的两种常用方法.
当密钥标识符尚未预先建立时, 本规范建议 (RECOMMENDS) 使用这些方法之一生成keyIdentifiers, 或使用使用不同哈希算法的类似方法. 当密钥标识符已预先建立时, CA应该 (SHOULD) 使用预先建立的标识符.
符合标准的CA必须 (MUST) 将此扩展标记为非关键 (non-critical).
符合标准的CA必须 (MUST) 将此扩展标记为非关键 (non-critical).
id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 }
SubjectKeyIdentifier ::= KeyIdentifier
4.2.1.3. Key Usage (密钥用途)
密钥用途扩展定义了证书中包含的密钥的用途 (例如, 加密、签名、证书签名). 当要限制可用于多个操作的密钥时, 可以使用使用限制. 例如, 当RSA密钥应仅用于验证除公钥证书和CRL之外的对象的签名时, 将断言digitalSignature和/或nonRepudiation位. 同样, 当RSA密钥应仅用于密钥管理时, 将断言keyEncipherment位.
符合标准的CA必须 (MUST) 在包含用于验证其他公钥证书或CRL上的数字签名的公钥的证书中包含此扩展. 当存在时, 符合标准的CA应该 (SHOULD) 将此扩展标记为关键 (critical).
id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }
KeyUsage ::= BIT STRING {
digitalSignature (0),
nonRepudiation (1), -- recent editions of X.509 have
-- renamed this bit to contentCommitment
keyEncipherment (2),
dataEncipherment (3),
keyAgreement (4),
keyCertSign (5),
cRLSign (6),
encipherOnly (7),
decipherOnly (8) }
KeyUsage类型中的位用法如下:
digitalSignature位: 当主体公钥用于验证数字签名时断言, 除了证书 (位5) 和CRL (位6) 上的签名, 例如用于实体认证服务、数据源认证服务和/或完整性服务的签名.
nonRepudiation位: 当主体公钥用于验证数字签名时断言, 除了证书 (位5) 和CRL (位6) 上的签名, 用于提供防止签名实体虚假否认某些操作的不可否认服务. 在发生后续冲突时, 可靠的第三方可以确定签名数据的真实性. (注意, 最新版本的X.509已将nonRepudiation位重命名为contentCommitment.)
keyEncipherment位: 当主体公钥用于加密私钥或秘密密钥时断言, 即用于密钥传输. 例如, 当RSA公钥用于加密对称内容解密密钥或非对称私钥时, 应设置此位.
dataEncipherment位: 当主体公钥用于直接加密原始用户数据而不使用中间对称密码时断言. 注意, 此位的使用极其罕见; 几乎所有应用程序都使用密钥传输或密钥协商来建立对称密钥.
keyAgreement位: 当主体公钥用于密钥协商时断言. 例如, 当Diffie-Hellman密钥用于密钥管理时, 设置此位.
keyCertSign位: 当主体公钥用于验证公钥证书上的签名时断言. 如果断言keyCertSign位, 则基本约束扩展 (第4.2.1.9节) 中的cA位也必须 (MUST) 被断言.
cRLSign位: 当主体公钥用于验证证书撤销列表上的签名时断言 (例如, CRL、增量CRL或ARL).
encipherOnly位: 在没有keyAgreement位的情况下, encipherOnly位的含义未定义. 当断言encipherOnly位并且也设置了keyAgreement位时, 主体公钥只能在执行密钥协商时用于加密数据.
decipherOnly位: 在没有keyAgreement位的情况下, decipherOnly位的含义未定义. 当断言decipherOnly位并且也设置了keyAgreement位时, 主体公钥只能在执行密钥协商时用于解密数据.
如果存在keyUsage扩展, 则除非设置了相应的keyCertSign或cRLSign位, 否则主体公钥禁止 (MUST NOT) 用于验证证书或CRL上的签名. 如果主体公钥仅用于验证证书和/或CRL上的签名, 则不应该 (SHOULD NOT) 设置digitalSignature和nonRepudiation位. 但是, 如果主体公钥除了验证证书和/或CRL上的签名之外还要验证其他对象的签名, 则可以 (MAY) 除keyCertSign和/或cRLSign位之外还设置digitalSignature和/或nonRepudiation位.
在keyUsage证书扩展中将nonRepudiation位与其他keyUsage位组合可能会产生安全影响, 具体取决于证书将被使用的上下文. digitalSignature和nonRepudiation位之间的进一步区别可以在特定证书策略中提供.
此配置文件不限制在keyUsage扩展实例中可能设置的位的组合. 但是, [RFC3279]、[RFC4055] 和 [RFC4491] 中指定了特定算法的keyUsage扩展的适当值. 当keyUsage扩展出现在证书中时, 至少一个位必须 (MUST) 设置为1.
4.2.1.4. Certificate Policies (证书策略)
证书策略扩展包含一个或多个策略信息项的序列, 每个策略信息项由一个对象标识符 (OID) 和可选限定符组成. 可能 (MAY) 存在的可选限定符不会改变策略的定义. 证书策略OID禁止 (MUST NOT) 在证书策略扩展中出现多次.
在终端实体证书中, 这些策略信息项表示证书已颁发的策略以及证书可用于的目的. 在CA证书中, 这些策略信息项限制包含此证书的证书路径的策略集. 当CA不希望限制包含此证书的证书路径的策略集时, 它可以 (MAY) 断言特殊策略anyPolicy, 值为 { 2 5 29 32 0 }.
具有特定策略要求的应用程序应该有一个它们将接受的策略列表, 并将证书中的策略OID与该列表进行比较. 如果此扩展是关键的, 路径验证软件必须 (MUST) 能够解释此扩展 (包括可选限定符), 或必须 (MUST) 拒绝证书.
为了促进互操作性, 此配置文件建议 (RECOMMENDS) 策略信息项仅由OID组成. 当单独的OID不足时, 此配置文件强烈建议将限定符的使用限制为本节中标识的那些. 当限定符与特殊策略anyPolicy一起使用时, 它们必须 (MUST) 限制为本节中标识的限定符. 仅考虑作为路径验证结果返回的那些限定符.
本规范定义了两种策略限定符类型供证书策略编写者和证书颁发者使用. 限定符类型是CPS指针 (CPS Pointer) 和用户通知 (User Notice) 限定符.
CPS指针限定符包含指向CA发布的认证实践声明 (Certification Practice Statement, CPS) 的指针. 指针采用URI的形式. 此限定符的处理要求是本地事项. 无论为扩展断言的关键性值如何, 本规范都不要求采取任何行动.
用户通知旨在在使用证书时显示给依赖方. 只有作为路径验证结果返回的用户通知才旨在显示给用户. 如果通知重复, 只需显示一个副本. 为了防止此类重复, 此限定符应该 (SHOULD) 仅存在于终端实体证书和颁发给其他组织的CA证书中.
用户通知有两个可选字段: noticeRef字段和explicitText字段. 符合标准的CA不应该 (SHOULD NOT) 使用noticeRef选项.
noticeRef字段: 如果使用, 命名一个组织并通过编号识别该组织准备的特定文本声明. 例如, 它可能识别组织"CertsRUs"和通知编号1. 在典型实现中, 应用程序软件将有一个包含CertsRUs当前通知集的通知文件; 应用程序将从文件中提取通知文本并显示它. 消息可以 (MAY) 是多语言的, 允许软件为自己的环境选择特定语言消息.
explicitText字段: 直接在证书中包含文本声明. explicitText字段是最大大小为200个字符的字符串. 符合标准的CA应该 (SHOULD) 对explicitText使用UTF8String编码, 但可以 (MAY) 使用IA5String. 符合标准的CA禁止 (MUST NOT) 将explicitText编码为VisibleString或BMPString. explicitText字符串不应该 (SHOULD NOT) 包含任何控制字符 (例如, U+0000到U+001F和U+007F到U+009F). 当使用UTF8String编码时, 所有字符序列应该 (SHOULD) 根据Unicode规范化形式C (NFC) [NFC] 进行规范化.
如果一个限定符中同时包含noticeRef和explicitText选项, 并且应用程序软件可以找到noticeRef选项指示的通知文本, 则应该 (SHOULD) 显示该文本; 否则, 应该 (SHOULD) 显示explicitText字符串.
注意: 虽然explicitText的最大大小为200个字符, 但一些不符合标准的CA超过此限制. 因此, 证书用户应该 (SHOULD) 优雅地处理超过200个字符的explicitText.
id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 }
anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 }
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 }
PolicyQualifierId ::= 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 {
ia5String IA5String (SIZE (1..200)),
visibleString VisibleString (SIZE (1..200)),
bmpString BMPString (SIZE (1..200)),
utf8String UTF8String (SIZE (1..200)) }
4.2.1.5. Policy Mappings (策略映射)
此扩展用于CA证书. 它列出了一个或多个OID对; 每对包括issuerDomainPolicy和subjectDomainPolicy. 配对表示颁发CA认为其issuerDomainPolicy等同于主体CA的subjectDomainPolicy.
颁发CA的用户可能会接受issuerDomainPolicy用于某些应用程序. 策略映射定义了与主体CA关联的策略列表, 这些策略可以被接受为与issuerDomainPolicy可比较.
策略映射扩展中命名的每个issuerDomainPolicy也应该 (SHOULD) 在同一证书的证书策略扩展中断言. 策略禁止 (MUST NOT) 映射到或从特殊值anyPolicy (第4.2.1.4节) 映射.
通常, 出现在策略映射扩展的issuerDomainPolicy字段中的证书策略不被认为是包含在证书路径中后续证书的可接受策略. 在某些情况下, CA可能希望从一个策略 (p1) 映射到另一个策略 (p2), 但仍希望issuerDomainPolicy (p1) 被认为可接受以包含在后续证书中. 例如, 如果CA正在从使用策略p1过渡到使用策略p2, 并且具有在每个策略下颁发的有效证书, 则可能会发生这种情况. CA可以通过在其颁发的CA证书中包含两个策略映射来表示这一点. 每个策略映射将具有p1的issuerDomainPolicy; 一个策略映射将具有p1的subjectDomainPolicy, 另一个将具有p2的subjectDomainPolicy.
CA和/或应用程序可以 (MAY) 支持此扩展. 符合标准的CA应该 (SHOULD) 将此扩展标记为关键 (critical).
id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 }
PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
issuerDomainPolicy CertPolicyId,
subjectDomainPolicy CertPolicyId }
4.2.1.6. Subject Alternative Name (主体备用名称)
主体备用名称扩展允许将身份绑定到证书的主体. 这些身份可以包含在证书主体字段中的身份之外或替代证书主体字段中的身份. 定义的选项包括互联网电子邮件地址、DNS名称、IP地址和统一资源标识符 (Uniform Resource Identifier, URI). 还存在其他选项, 包括完全本地定义. 可以 (MAY) 包含多种名称形式和每种名称形式的多个实例. 每当此类身份要绑定到证书中时, 必须 (MUST) 使用主体备用名称 (或颁发者备用名称) 扩展; 但是, 如第4.1.2.4节所述, 也可以 (MAY) 使用domainComponent属性在subject字段中表示DNS名称. 注意, 当这些名称在subject字段中表示时, 实现不需要将它们转换为DNS名称.
因为主体备用名称被认为是明确绑定到公钥的, 所以CA必须 (MUST) 验证主体备用名称的所有部分.
此外, 如果证书中包含的唯一主体身份是备用名称形式 (例如, 电子邮件地址), 则主体可辨别名称必须 (MUST) 为空 (空序列), 并且subjectAltName扩展必须 (MUST) 存在. 如果subject字段包含空序列, 则颁发CA必须 (MUST) 包含标记为关键 (critical) 的subjectAltName扩展. 当在具有非空主体可辨别名称的证书中包含subjectAltName扩展时, 符合标准的CA应该 (SHOULD) 将subjectAltName扩展标记为非关键 (non-critical).
当subjectAltName扩展包含互联网邮件地址时, 地址必须 (MUST) 存储在rfc822Name中. rfc822Name的格式是 [RFC2821] 第4.1.2节中定义的"Mailbox". Mailbox的形式为"Local-part@Domain". 注意, Mailbox之前没有短语 (例如通用名称), 之后没有注释 (括号中包围的文本), 并且不被 < 和 > 包围. 包含国际化域名的互联网邮件地址编码规则在第7.5节中指定.
当subjectAltName扩展包含iPAddress时, 地址必须 (MUST) 以"网络字节序"存储在八位字节串中, 如 [RFC791] 所指定. 每个八位字节的最低有效位 (LSB) 是网络地址中相应字节的LSB. 对于 [RFC791] 中指定的IP版本4, 八位字节串必须 (MUST) 恰好包含四个八位字节. 对于 [RFC2460] 中指定的IP版本6, 八位字节串必须 (MUST) 恰好包含十六个八位字节.
当subjectAltName扩展包含域名系统标签时, 域名必须 (MUST) 存储在dNSName (IA5String) 中. 名称必须 (MUST) 采用"首选名称语法", 如 [RFC1034] 第3.5节所指定并由 [RFC1123] 第2.1节修改. 注意, 虽然域名中允许使用大写和小写字母, 但大小写没有意义. 此外, 虽然字符串" "是合法的域名, 但禁止 (MUST NOT) 使用dNSName为" "的subjectAltName扩展. 最后, 禁止 (MUST NOT) 使用互联网邮件地址的DNS表示 (subscriber.example.com而不是[email protected]); 此类身份应编码为rfc822Name. 国际化域名的编码规则在第7.2节中指定.
当subjectAltName扩展包含URI时, 名称必须 (MUST) 存储在uniformResourceIdentifier (IA5String) 中. 名称禁止 (MUST NOT) 是相对URI, 并且必须 (MUST) 遵循 [RFC3986] 中指定的URI语法和编码规则. 名称必须 (MUST) 包括方案 (例如, "http"或"ftp") 和方案特定部分. 包含授权 ([RFC3986], 第3.2节) 的URI必须 (MUST) 包括完全限定域名或IP地址作为主机. 国际化资源标识符 (Internationalized Resource Identifiers, IRIs) 的编码规则在第7.4节中指定.
如 [RFC3986] 所指定, 方案名称不区分大小写 (例如, "http"等同于"HTTP"). 主机部分 (如果存在) 也不区分大小写, 但方案特定部分的其他组件可能区分大小写. 比较URI的规则在第7.4节中指定.
当subjectAltName扩展在directoryName中包含DN时, 编码规则与第4.1.2.4节中为issuer字段指定的规则相同. 对于由issuer字段定义的一个CA认证的每个主体实体, DN必须 (MUST) 是唯一的. CA可以 (MAY) 向同一主体实体颁发多个具有相同DN的证书.
subjectAltName可以 (MAY) 通过使用otherName字段携带其他名称类型. 名称的格式和语义通过type-id字段中的对象标识符 (OBJECT IDENTIFIER) 指示. 名称本身作为otherName中的value字段传送. 例如, Kerberos [RFC4120] 格式名称可以使用Kerberos 5主体名称OID和Realm和PrincipalName的序列编码到otherName中.
主体备用名称可以 (MAY) 使用第4.2.1.10节中描述的名称约束扩展以与主体可辨别名称相同的方式进行约束.
如果存在subjectAltName扩展, 序列必须 (MUST) 至少包含一个条目. 与subject字段不同, 符合标准的CA禁止 (MUST NOT) 颁发包含空GeneralName字段的subjectAltNames的证书. 例如, rfc822Name表示为IA5String. 虽然空字符串是有效的IA5String, 但此配置文件不允许此类rfc822Name. 此配置文件未定义在处理证书路径时遇到此类证书的客户端的行为.
最后, 此规范不涉及包含通配符字符 (例如, 作为一组名称的占位符) 的主体备用名称的语义. 具有特定要求的应用程序可以 (MAY) 使用此类名称, 但它们必须定义语义.
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 }
4.2.1.7. Issuer Alternative Name (颁发者备用名称)
与第4.2.1.6节一样, 此扩展用于将互联网风格的身份与证书颁发者关联. 颁发者备用名称必须 (MUST) 按第4.2.1.6节中的方式编码. 颁发者备用名称不作为第6节中证书路径验证算法的一部分进行处理. (即, 颁发者备用名称不用于名称链接, 并且不强制执行名称约束.)
当存在时, 符合标准的CA应该 (SHOULD) 将此扩展标记为非关键 (non-critical).
id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 }
IssuerAltName ::= GeneralNames
4.2.1.8. Subject Directory Attributes (主体目录属性)
主体目录属性扩展用于传送主体的识别属性 (例如, 国籍). 该扩展定义为一个或多个属性的序列. 符合标准的CA必须 (MUST) 将此扩展标记为非关键 (non-critical).
id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 }
SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
4.2.1.9. Basic Constraints (基本约束)
基本约束扩展标识证书主体是否为CA, 以及包含此证书的有效证书路径的最大深度.
cA布尔值指示认证的公钥是否可用于验证证书签名. 如果未断言cA布尔值, 则密钥用途扩展中的keyCertSign位禁止 (MUST NOT) 被断言. 如果版本3证书中不存在基本约束扩展, 或扩展存在但未断言cA布尔值, 则认证的公钥禁止 (MUST NOT) 用于验证证书签名.
pathLenConstraint字段仅在断言cA布尔值并且密钥用途扩展 (如果存在) 断言keyCertSign位 (第4.2.1.3节) 时才有意义. 在这种情况下, 它给出了在有效证书路径中可以跟随此证书的非自颁发中间证书的最大数量. (注意: 证书路径中的最后一个证书不是中间证书, 并且不包含在此限制中. 通常, 最后一个证书是终端实体证书, 但它可以是CA证书.) pathLenConstraint为零表示在有效证书路径中不能跟随非自颁发的中间CA证书. 当它出现时, pathLenConstraint字段必须 (MUST) 大于或等于零. 当pathLenConstraint不出现时, 不施加限制.
符合标准的CA必须 (MUST) 在所有包含用于验证证书上的数字签名的公钥的CA证书中包含此扩展, 并且必须 (MUST) 在此类证书中将扩展标记为关键 (critical). 此扩展可以 (MAY) 作为关键或非关键扩展出现在包含专门用于验证证书上的数字签名以外的目的的公钥的CA证书中. 此类CA证书包括包含专门用于验证CRL上的数字签名的公钥的证书, 以及包含与证书注册协议一起使用的密钥管理公钥的证书. 此扩展可以 (MAY) 作为关键或非关键扩展出现在终端实体证书中.
CA禁止 (MUST NOT) 包含pathLenConstraint字段, 除非断言cA布尔值并且密钥用途扩展断言keyCertSign位.
id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }
BasicConstraints ::= SEQUENCE {
cA BOOLEAN DEFAULT FALSE,
pathLenConstraint INTEGER (0..MAX) OPTIONAL }
4.2.1.10. Name Constraints (名称约束)
名称约束扩展必须 (MUST) 仅用于CA证书, 它指示一个名称空间, 证书路径中后续证书的所有主体名称必须 (MUST) 位于其中. 限制应用于主体可辨别名称并应用于主体备用名称. 限制仅在存在指定名称形式时才应用. 如果证书中不存在该类型的名称, 则证书是可接受的.
名称约束不应用于自颁发证书 (除非证书是路径中的最终证书). (这可以防止使用名称约束的CA使用自颁发证书来实现密钥滚动.)
限制以允许或排除的名称子树的形式定义. 与excludedSubtrees字段中的限制匹配的任何名称都是无效的, 无论permittedSubtrees中出现的信息如何. 符合标准的CA必须 (MUST) 将此扩展标记为关键 (critical), 并且不应该 (SHOULD NOT) 对x400Address、ediPartyName或registeredID名称形式施加名称约束. 符合标准的CA禁止 (MUST NOT) 颁发名称约束为空序列的证书. 也就是说, permittedSubtrees字段或excludedSubtrees必须 (MUST) 存在.
符合此配置文件的应用程序必须 (MUST) 能够处理对directoryName名称形式施加的名称约束, 并且应该 (SHOULD) 能够处理对rfc822Name、uniformResourceIdentifier、dNSName和iPAddress名称形式施加的名称约束. 如果标记为关键的名称约束扩展对特定名称形式施加约束, 并且该名称形式的实例出现在后续证书的subject字段或subjectAltName扩展中, 则应用程序必须 (MUST) 处理约束或拒绝证书.
在此配置文件中, minimum和maximum字段不与任何名称形式一起使用, 因此, minimum必须 (MUST) 为零, maximum必须 (MUST) 不存在. 但是, 如果应用程序遇到为后续证书中出现的名称形式指定minimum或maximum的其他值的关键名称约束扩展, 则应用程序必须 (MUST) 处理这些字段或拒绝证书.
对于URI, 约束应用于名称的主机部分. 约束必须 (MUST) 指定为完全限定域名, 并且可以 (MAY) 指定主机或域. 例如"host.example.com"和".example.com". 当约束以句号开头时, 它可以 (MAY) 用一个或多个标签展开. 也就是说, 约束".example.com"由host.example.com和my.host.example.com满足. 但是, 约束".example.com"不被"example.com"满足. 当约束不以句号开头时, 它指定主机. 如果约束应用于uniformResourceIdentifier名称形式, 并且后续证书包含带有uniformResourceIdentifier的subjectAltName扩展, 该uniformResourceIdentifier不包含将主机名指定为完全限定域名的授权组件 (例如, 如果URI不包含授权组件或包含授权组件, 其中主机名指定为IP地址), 则应用程序必须 (MUST) 拒绝证书.
互联网邮件地址的名称约束可以 (MAY) 指定特定邮箱、特定主机上的所有地址或域中的所有邮箱. 要指示特定邮箱, 约束是完整的邮件地址. 例如, "[email protected]"指示主机"example.com"上的root邮箱. 要指示特定主机上的所有互联网邮件地址, 约束指定为主机名. 例如, 约束"example.com"由主机"example.com"上的任何邮件地址满足. 要指定域内的任何地址, 约束以前导句号指定 (与URI一样). 例如, ".example.com"指示域"example.com"中的所有互联网邮件地址, 但不包括主机"example.com"上的互联网邮件地址.
DNS名称限制表示为host.example.com. 可以通过简单地在名称左侧添加零个或多个标签来构造的任何DNS名称都满足名称约束. 例如, www.host.example.com将满足约束, 但host1.example.com不会.
存在传统实现, 其中电子邮件地址嵌入到emailAddress类型的属性中的主体可辨别名称中 (第4.1.2.6节). 当对rfc822Name名称形式施加约束, 但证书不包含主体备用名称时, rfc822Name约束必须 (MUST) 应用于主体可辨别名称中emailAddress类型的属性. emailAddress的ASN.1语法和相应的OID在附录A中提供.
directoryName形式的限制必须 (MUST) 应用于证书中的subject字段 (当证书包含非空subject字段时) 以及subjectAltName扩展中directoryName类型的任何名称. x400Address形式的限制必须 (MUST) 应用于subjectAltName扩展中x400Address类型的任何名称.
当应用directoryName形式的限制时, 实现必须 (MUST) 比较DN属性. 至少, 实现必须 (MUST) 执行第7.1节中指定的DN比较规则. 颁发具有directoryName形式限制的证书的CA不应该 (SHOULD NOT) 依赖完整ISO DN名称比较算法的实现. 这意味着名称限制必须 (MUST) 与subject字段或subjectAltName扩展中使用的编码相同地声明.
iPAddress的语法必须 (MUST) 如第4.2.1.6节所述, 并针对名称约束进行以下特定添加. 对于IPv4地址, GeneralName的iPAddress字段必须 (MUST) 包含八 (8) 个八位字节, 以RFC 4632 (CIDR) 的样式编码以表示地址范围 [RFC4632]. 对于IPv6地址, iPAddress字段必须 (MUST) 包含32个类似编码的八位字节. 例如, "C类"子网192.0.2.0的名称约束表示为八位字节C0 00 02 00 FF FF FF 00, 表示CIDR表示法192.0.2.0/24 (掩码255.255.255.0).
编码和处理名称约束的其他规则在第7节中指定.
本规范未定义otherName、ediPartyName和registeredID的名称约束的语法和语义, 但是, 可以在其他文档中指定其他名称形式的名称约束的语法和语义.
id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 }
NameConstraints ::= 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)
4.2.1.11. Policy Constraints (策略约束)
策略约束扩展可用于颁发给CA的证书. 策略约束扩展以两种方式约束路径验证. 它可用于禁止策略映射或要求路径中的每个证书包含可接受的策略标识符.
如果存在inhibitPolicyMapping字段, 该值指示在不再允许策略映射之前路径中可能出现的其他证书数量. 例如, 值为1表示可以在此证书主体颁发的证书中处理策略映射, 但不能在路径中的其他证书中处理.
如果存在requireExplicitPolicy字段, requireExplicitPolicy的值指示在整个路径需要显式策略之前路径中可能出现的其他证书数量. 当需要显式策略时, 路径中的所有证书都必须在证书策略扩展中包含可接受的策略标识符. 可接受的策略标识符是证书路径用户所需策略的标识符或通过策略映射声明为等效的策略的标识符.
符合标准的应用程序必须 (MUST) 能够处理requireExplicitPolicy字段, 并且应该 (SHOULD) 能够处理inhibitPolicyMapping字段. 支持inhibitPolicyMapping字段的应用程序还必须 (MUST) 实现对policyMappings扩展的支持. 如果policyConstraints扩展标记为关键并且存在inhibitPolicyMapping字段, 则未实现对inhibitPolicyMapping字段支持的应用程序必须 (MUST) 拒绝证书.
符合标准的CA禁止 (MUST NOT) 颁发策略约束为空序列的证书. 也就是说, 如果存在策略约束扩展, 则必须 (MUST) 存在inhibitPolicyMapping字段或requireExplicitPolicy字段.
未在此配置文件中解决遇到空策略约束字段的客户端的行为.
符合标准的CA必须 (MUST) 将此扩展标记为关键 (critical).
id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 }
PolicyConstraints ::= SEQUENCE {
requireExplicitPolicy [0] SkipCerts OPTIONAL,
inhibitPolicyMapping [1] SkipCerts OPTIONAL }
SkipCerts ::= INTEGER (0..MAX)
4.2.1.12. Extended Key Usage (扩展密钥用途)
此扩展指示认证的公钥可用于的一个或多个目的, 除了或代替密钥用途扩展中指示的基本目的. 通常, 此扩展将仅出现在终端实体证书中. 此扩展定义如下:
id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 }
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
KeyPurposeId ::= OBJECT IDENTIFIER
任何有需要的组织都可以 (may) 定义密钥目的. 用于识别密钥目的的对象标识符必须 (MUST) 根据IANA或ITU-T建议X.660 [X.660] 分配.
根据证书颁发者的选择, 此扩展可以 (MAY) 是关键或非关键的.
如果存在扩展, 则证书必须 (MUST) 仅用于指示的目的之一. 如果指示了多个目的, 应用程序不需要识别所有指示的目的, 只要存在预期目的即可. 使用证书的应用程序可以 (MAY) 要求扩展密钥用途扩展存在, 并且指示特定目的, 以便证书对该应用程序可接受.
如果CA包含扩展密钥用途以满足此类应用程序, 但不希望限制密钥的用途, 则CA可以除了应用程序所需的特定密钥目的之外还包含特殊的KeyPurposeId anyExtendedKeyUsage. 如果存在anyExtendedKeyUsage KeyPurposeId, 符合标准的CA不应该 (SHOULD NOT) 将此扩展标记为关键. 要求存在特定目的的应用程序可以 (MAY) 拒绝包含anyExtendedKeyUsage OID但不包含应用程序所需的特定OID的证书.
如果证书同时包含密钥用途扩展和扩展密钥用途扩展, 则必须 (MUST) 独立处理这两个扩展, 并且证书必须 (MUST) 仅用于与两个扩展一致的目的. 如果没有与两个扩展一致的目的, 则证书禁止 (MUST NOT) 用于任何目的.
定义了以下密钥用途目的:
anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 }
id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }
-- TLS WWW服务器认证
-- 可能一致的密钥用途位: digitalSignature,
-- keyEncipherment 或 keyAgreement
id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }
-- TLS WWW客户端认证
-- 可能一致的密钥用途位: digitalSignature
-- 和/或 keyAgreement
id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 }
-- 可下载可执行代码的签名
-- 可能一致的密钥用途位: digitalSignature
id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
-- 电子邮件保护
-- 可能一致的密钥用途位: digitalSignature,
-- nonRepudiation, 和/或 (keyEncipherment 或 keyAgreement)
id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 }
-- 将对象的哈希绑定到时间
-- 可能一致的密钥用途位: digitalSignature
-- 和/或 nonRepudiation
id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 }
-- 签名OCSP响应
-- 可能一致的密钥用途位: digitalSignature
-- 和/或 nonRepudiation
4.2.1.13. CRL Distribution Points (CRL分发点)
CRL分发点扩展标识如何获取CRL信息. 该扩展应该 (SHOULD) 是非关键的, 但此配置文件建议 (RECOMMENDS) CA和应用程序支持此扩展. 第5节包含CRL管理的进一步讨论.
cRLDistributionPoints扩展是DistributionPoint的序列. DistributionPoint由三个字段组成, 每个字段都是可选的: distributionPoint、reasons和cRLIssuer. 虽然这些字段中的每一个都是可选的, 但DistributionPoint禁止 (MUST NOT) 仅由reasons字段组成; distributionPoint或cRLIssuer必须 (MUST) 存在. 如果证书颁发者不是CRL颁发者, 则cRLIssuer字段必须 (MUST) 存在并包含CRL颁发者的Name. 如果证书颁发者也是CRL颁发者, 则符合标准的CA必须 (MUST) 省略cRLIssuer字段并且必须 (MUST) 包含distributionPoint字段.
当存在distributionPoint字段时, 它包含一般名称的序列或单个值nameRelativeToCRLIssuer. 如果DistributionPointName包含多个值, 每个名称描述获取相同CRL的不同机制. 例如, 可以通过LDAP和HTTP检索相同的CRL.
如果distributionPoint字段包含directoryName, 则该directoryName的条目包含相关原因的当前CRL, 并且CRL由相关cRLIssuer颁发. CRL可以存储在certificateRevocationList或authorityRevocationList属性中. CRL由应用程序从本地配置的任何目录服务器获取. 应用程序用于访问目录的协议 (例如, DAP或LDAP) 是本地事项.
如果DistributionPointName包含URI类型的一般名称, 则必须 (MUST) 假定以下语义: URI是指向相关原因的当前CRL的指针, 将由相关cRLIssuer颁发. 当使用HTTP或FTP URI方案时, URI必须 (MUST) 指向 [RFC2585] 中指定的单个DER编码的CRL. 通过URI访问的HTTP服务器实现应该 (SHOULD) 在响应的content-type头字段中指定媒体类型application/pkix-crl. 当使用LDAP URI方案 [RFC4516] 时, URI必须 (MUST) 包含包含持有CRL的条目的可辨别名称的<dn>字段, 必须 (MUST) 包含包含持有CRL的属性的适当属性描述的单个<attrdesc> [RFC4523], 并且应该 (SHOULD) 包含<host> (例如, <ldap://ldap.example.com/cn=example%20CA,dc=example,dc=com?certificateRevocationList;binary>). 省略<host> (例如, <ldap:///cn=CA,dc=example,dc=com?authorityRevocationList;binary>) 的效果是依赖客户端可能具有的任何先验知识来联系适当的服务器. 当存在时, DistributionPointName应该 (SHOULD) 至少包含一个LDAP或HTTP URI.
如果DistributionPointName包含单个值nameRelativeToCRLIssuer, 则该值提供可辨别名称片段. 该片段附加到CRL颁发者的X.500可辨别名称以获取分发点名称. 如果DistributionPoint中的cRLIssuer字段存在, 则名称片段附加到它包含的可辨别名称; 否则, 名称片段附加到证书颁发者可辨别名称. 符合标准的CA不应该 (SHOULD NOT) 使用nameRelativeToCRLIssuer来指定分发点名称. 当cRLIssuer包含多个可辨别名称时, DistributionPointName禁止 (MUST NOT) 使用nameRelativeToCRLIssuer替代方案.
如果DistributionPoint省略reasons字段, 则CRL必须 (MUST) 包含所有原因的撤销信息. 此配置文件建议 (RECOMMENDS) 不要按原因代码分段CRL. 当符合标准的CA在证书中包含cRLDistributionPoints扩展时, 它必须 (MUST) 至少包含一个DistributionPoint, 该DistributionPoint指向涵盖所有原因的证书的CRL.
cRLIssuer标识签署和颁发CRL的实体. 如果存在, cRLIssuer只能 (MUST) 包含DistributionPoint指向的CRL的issuer字段中的可辨别名称 (DN). cRLIssuer字段中名称的编码必须 (MUST) 与CRL的issuer字段中的编码完全相同. 如果包含cRLIssuer字段, 并且该字段中的DN与CRL所在的X.500或LDAP目录条目不对应, 则符合标准的CA必须 (MUST) 包含distributionPoint字段.
id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 }
CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
DistributionPoint ::= SEQUENCE {
distributionPoint [0] DistributionPointName OPTIONAL,
reasons [1] ReasonFlags OPTIONAL,
cRLIssuer [2] GeneralNames OPTIONAL }
DistributionPointName ::= CHOICE {
fullName [0] GeneralNames,
nameRelativeToCRLIssuer [1] RelativeDistinguishedName }
ReasonFlags ::= BIT STRING {
unused (0),
keyCompromise (1),
cACompromise (2),
affiliationChanged (3),
superseded (4),
cessationOfOperation (5),
certificateHold (6),
privilegeWithdrawn (7),
aACompromise (8) }
4.2.1.14. Inhibit anyPolicy (禁止anyPolicy)
禁止anyPolicy扩展可用于颁发给CA的证书. 禁止anyPolicy扩展指示特殊的anyPolicy OID (值为 { 2 5 29 32 0 }) 不被视为其他证书策略的显式匹配, 除非它出现在中间自颁发CA证书中. 该值指示在不再允许anyPolicy之前路径中可能出现的其他非自颁发证书的数量. 例如, 值为1表示可以在此证书主体颁发的证书中处理anyPolicy, 但不能在路径中的其他证书中处理.
符合标准的CA必须 (MUST) 将此扩展标记为关键 (critical).
id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 }
InhibitAnyPolicy ::= SkipCerts
SkipCerts ::= INTEGER (0..MAX)
4.2.1.15. Freshest CRL (最新CRL, 又名增量CRL分发点)
最新CRL扩展标识如何获取增量CRL信息. 符合标准的CA必须 (MUST) 将该扩展标记为非关键 (non-critical). 第5节包含CRL管理的进一步讨论.
此扩展和cRLDistributionPoints扩展使用相同的语法, 并在第4.2.1.13节中描述. 相同的约定适用于两个扩展.
id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 }
FreshestCRL ::= CRLDistributionPoints
4.2.2. Private Internet Extensions (私有互联网扩展)
本节定义了两个用于互联网公钥基础设施的扩展. 这些扩展可用于指导应用程序访问有关颁发者或主体的在线信息. 每个扩展都包含一系列访问方法和访问位置. 访问方法是一个对象标识符, 指示可用信息的类型. 访问位置是GeneralName, 它隐式指定信息的位置和格式以及获取信息的方法.
为私有扩展定义了对象标识符. 与私有扩展关联的对象标识符在id-pkix弧内的id-pe弧下定义. 为互联网PKI定义的任何未来扩展也预期在id-pe弧下定义.
id-pkix OBJECT IDENTIFIER ::=
{ iso(1) identified-organization(3) dod(6) internet(1)
security(5) mechanisms(5) pkix(7) }
id-pe OBJECT IDENTIFIER ::= { id-pkix 1 }
4.2.2.1. Authority Information Access (授权信息访问)
授权信息访问扩展指示如何访问扩展出现的证书的颁发者的信息和服务. 信息和服务可能包括在线验证服务和CA策略数据. (CRL的位置未在此扩展中指定; 该信息由cRLDistributionPoints扩展提供.) 此扩展可以包含在终端实体或CA证书中. 符合标准的CA必须 (MUST) 将此扩展标记为非关键 (non-critical).
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-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
序列AuthorityInfoAccessSyntax中的每个条目都描述由包含此扩展的证书的颁发者提供的附加信息的格式和位置. 信息的类型和格式由accessMethod字段指定; accessLocation字段指定信息的位置. 检索机制可能由accessMethod暗示或由accessLocation指定.
此配置文件定义了两个accessMethod OID: id-ad-caIssuers和id-ad-ocsp.
在公钥证书中, 当附加信息列出颁发包含此扩展的证书的CA的证书时, 使用id-ad-caIssuers OID. 引用的CA颁发者描述旨在帮助证书用户选择终止于证书用户信任的点的证书路径.
当id-ad-caIssuers作为accessMethod出现时, accessLocation字段描述引用的描述服务器和访问协议以获取引用的描述. accessLocation字段定义为GeneralName, 它可以采用几种形式.
当accessLocation是directoryName时, 应用程序应从本地配置的任何目录服务器获取信息. directoryName的条目包含 [RFC4523] 中指定的crossCertificatePair和/或cACertificate属性中的CA证书. 应用程序用于访问目录的协议 (例如, DAP或LDAP) 是本地事项.
当信息通过LDAP可用时, accessLocation应该 (SHOULD) 是uniformResourceIdentifier. LDAP URI [RFC4516] 必须 (MUST) 包含包含持有证书的条目的可辨别名称的<dn>字段, 必须 (MUST) 包含列出持有DER编码证书或交叉证书对的属性的适当属性描述的<attributes>字段 [RFC4523], 并且应该 (SHOULD) 包含<host> (例如, <ldap://ldap.example.com/cn=CA,dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>). 省略<host> (例如, <ldap:///cn=exampleCA,dc=example,dc=com?cACertificate;binary>) 的效果是依赖客户端可能具有的任何先验知识来联系适当的服务器.
当信息通过HTTP或FTP可用时, accessLocation必须 (MUST) 是uniformResourceIdentifier, 并且URI必须 (MUST) 指向 [RFC2585] 中指定的单个DER编码证书或 [RFC2797] 中指定的BER或DER编码的"仅证书" CMS消息中的证书集合.
支持HTTP或FTP访问证书的符合标准的应用程序必须 (MUST) 能够接受单个DER编码证书, 并且应该 (SHOULD) 能够接受"仅证书"CMS消息.
通过URI访问的HTTP服务器实现应该 (SHOULD) 在响应的content-type头字段中为单个DER编码证书指定媒体类型application/pkix-cert [RFC2585], 并且应该 (SHOULD) 在响应的content-type头字段中为"仅证书"CMS消息指定媒体类型application/pkcs7-mime [RFC2797]. 对于FTP, 包含单个DER编码证书的文件的名称应该 (SHOULD) 具有后缀".cer" [RFC2585], 并且包含"仅证书"CMS消息的文件的名称应该 (SHOULD) 具有后缀".p7c" [RFC2797]. 消费客户端可以使用媒体类型或文件扩展名作为内容的提示, 但不应仅依赖服务器响应中存在的正确媒体类型或文件扩展名.
其他id-ad-caIssuers accessLocation名称形式的语义未定义.
authorityInfoAccess扩展可以包含id-ad-caIssuers accessMethod的多个实例. 不同的实例可以指定访问相同信息的不同方法, 或者可以指向不同的信息. 当使用id-ad-caIssuers accessMethod时, 至少一个实例应该 (SHOULD) 指定作为HTTP [RFC2616] 或LDAP [RFC4516] URI的accessLocation.
当使用在线证书状态协议 (Online Certificate Status Protocol, OCSP) [RFC2560] 可获得包含此扩展的证书的撤销信息时, 使用id-ad-ocsp OID.
当id-ad-ocsp作为accessMethod出现时, accessLocation字段是OCSP响应者的位置, 使用 [RFC2560] 中定义的约定.
可以在其他PKIX规范中定义其他访问描述符.
4.2.2.2. Subject Information Access (主体信息访问)
主体信息访问扩展指示如何访问扩展出现的证书的主体的信息和服务. 当主体是CA时, 信息和服务可能包括证书验证服务和CA策略数据. 当主体是终端实体时, 信息描述由主体提供的服务.
此扩展的语法和语义与4.2.2.1节中定义的授权信息访问扩展的语法和语义相同, 但有以下例外:
id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 }
SubjectInfoAccessSyntax ::=
SEQUENCE SIZE (1..MAX) OF AccessDescription
符合标准的CA必须 (MUST) 将此扩展标记为非关键 (non-critical).
当使用id-ad-caRepository accessMethod时, 至少一个实例应该 (SHOULD) 指定作为HTTP [RFC2616] 或LDAP [RFC4516] URI的accessLocation.
当主体使用 [RFC3161] 中定义的时间戳协议提供时间戳服务时, 使用id-ad-timeStamping OID. 当时间戳服务通过HTTP或FTP可用时, accessLocation必须 (MUST) 是uniformResourceIdentifier. 当时间戳服务通过电子邮件可用时, accessLocation必须 (MUST) 是rfc822Name. 当时间戳服务使用TCP/IP可用时, 可以使用dNSName或iPAddress名称形式. 当accessMethod为id-ad-timeStamping时, 其他accessLocation名称形式的语义未由本规范定义.
可以在其他PKIX规范中定义其他访问描述符.
id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 }
id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 }