Skip to main content

4.1. Basic Certificate Fields (基本证书字段)

X.509 v3证书基本语法如下. 对于签名计算, 使用ASN.1可辨别编码规则 (Distinguished Encoding Rules, DER) [X.690] 对要签名的数据进行编码. ASN.1 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,
-- If present, version MUST be v2 or v3
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
}

以下各项描述了用于互联网的X.509 v3证书.

4.1.1. Certificate Fields (证书字段)

证书 (Certificate) 是一个包含三个必需字段的序列 (SEQUENCE). 这些字段在以下小节中详细描述.

4.1.1.1. tbsCertificate (待签名证书)

该字段包含主体和颁发者的名称、与主体关联的公钥、有效期以及其他相关信息. 这些字段在第4.1.2节中详细描述; tbsCertificate通常包括扩展, 扩展在第4.2节中描述.

4.1.1.2. signatureAlgorithm (签名算法)

signatureAlgorithm字段包含CA用于签署此证书的加密算法的标识符. [RFC3279]、[RFC4055] 和 [RFC4491] 列出了支持的签名算法, 但也可以 (MAY) 支持其他签名算法.

算法标识符由以下ASN.1结构定义:

AlgorithmIdentifier  ::=  SEQUENCE  {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }

算法标识符用于识别加密算法. OBJECT IDENTIFIER组件识别算法 (例如带SHA-1的DSA). 可选参数字段的内容将根据识别的算法而变化.

此字段必须 (MUST) 包含与序列tbsCertificate中signature字段 (第4.1.2.3节) 相同的算法标识符.

4.1.1.3. signatureValue (签名值)

signatureValue字段包含对ASN.1 DER编码的tbsCertificate计算的数字签名. ASN.1 DER编码的tbsCertificate用作签名函数的输入. 此签名值编码为位串 (BIT STRING) 并包含在signature字段中. [RFC3279]、[RFC4055] 和 [RFC4491] 中列出的每个算法都指定了此过程的详细信息.

通过生成此签名, CA证明tbsCertificate字段中信息的有效性. 特别是, CA证明公钥材料与证书主体之间的绑定.

4.1.2. TBSCertificate (待签名证书)

序列TBSCertificate包含与证书主体和颁发它的CA相关的信息. 每个TBSCertificate都包含主体和颁发者的名称、与主体关联的公钥、有效期、版本号和序列号; 某些可能 (MAY) 包含可选的唯一标识符字段. 本节的其余部分描述这些字段的语法和语义. TBSCertificate通常包括扩展. 互联网PKI的扩展在第4.2节中描述.

4.1.2.1. Version (版本)

此字段描述编码证书的版本. 当使用扩展时 (如本配置文件所预期), 版本必须 (MUST) 为3 (值为2). 如果不存在扩展但存在UniqueIdentifier, 则版本应该 (SHOULD) 为2 (值为1); 但是, 版本可以 (MAY) 为3. 如果仅存在基本字段, 则版本应该 (SHOULD) 为1 (该值从证书中省略作为默认值); 但是, 版本可以 (MAY) 为2或3.

实现应该 (SHOULD) 准备接受任何版本的证书. 至少, 符合标准的实现必须 (MUST) 识别版本3证书.

基于此配置文件的实现不期望生成版本2证书.

4.1.2.2. Serial Number (序列号)

序列号必须 (MUST) 是由CA分配给每个证书的正整数. 对于给定CA颁发的每个证书, 它必须 (MUST) 是唯一的 (即, 颁发者名称和序列号标识唯一的证书). CA必须 (MUST) 强制serialNumber为非负整数.

鉴于上述唯一性要求, 序列号可能包含长整数. 证书用户必须 (MUST) 能够处理最多20个八位字节的serialNumber值. 符合标准的CA禁止 (MUST NOT) 使用超过20个八位字节的serialNumber值.

注意: 不符合标准的CA可能会颁发具有负数或零序列号的证书. 证书用户应该 (SHOULD) 准备优雅地处理此类证书.

4.1.2.3. Signature (签名)

此字段包含CA用于签署证书的算法的算法标识符.

此字段必须 (MUST) 包含与序列Certificate中signatureAlgorithm字段 (第4.1.1.2节) 相同的算法标识符. 可选参数字段的内容将根据识别的算法而变化. [RFC3279]、[RFC4055] 和 [RFC4491] 列出了支持的签名算法, 但也可以 (MAY) 支持其他签名算法.

4.1.2.4. Issuer (颁发者)

issuer字段标识已签署并颁发证书的实体. issuer字段必须 (MUST) 包含非空的可辨别名称 (Distinguished Name, DN). issuer字段定义为X.501类型Name [X.501]. Name由以下ASN.1结构定义:

Name ::= CHOICE { -- only one possibility for now --
rdnSequence RDNSequence }

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::=
SET SIZE (1..MAX) 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描述由属性 (如国家名称) 和相应值 (如US) 组成的分层名称. 组件AttributeValue的类型由AttributeType确定; 通常它将是DirectoryString.

DirectoryString类型定义为PrintableString、TeletexString、BMPString、UTF8String和UniversalString的选择. 符合此配置文件的CA必须 (MUST) 使用DirectoryString的PrintableString或UTF8String编码, 有两个例外. 当CA先前颁发的证书中issuer字段的属性使用TeletexString、BMPString或UniversalString编码时, CA可以 (MAY) 继续使用这些DirectoryString编码以保持向后兼容性. 此外, 添加到现有CA颁发的证书中issuer字段的属性使用TeletexString、BMPString或UniversalString编码的域的新CA, 可以 (MAY) 使用与现有CA相同的编码来编码它们与现有CA共享的属性.

如上所述, 可辨别名称由属性组成. 本规范不限制可能出现在名称中的属性类型集. 但是, 符合标准的实现必须 (MUST) 准备接收包含以下定义的属性类型集的issuer名称的证书. 本规范建议 (RECOMMENDS) 支持其他属性类型.

标准属性集已在X.500系列规范 [X.520] 中定义. 本规范的实现必须 (MUST) 准备在issuer和subject (第4.1.2.6节) 名称中接收以下标准属性类型:

  • country (国家),
  • organization (组织),
  • organizational unit (组织单位),
  • distinguished name qualifier (可辨别名称限定符),
  • state or province name (州或省名称),
  • common name (通用名称) (例如, "Susan Housley"), 以及
  • serial number (序列号).

此外, 本规范的实现应该 (SHOULD) 准备在issuer和subject名称中接收以下标准属性类型:

  • locality (地区),
  • title (职位),
  • surname (姓氏),
  • given name (名字),
  • initials (首字母),
  • pseudonym (假名), 以及
  • generation qualifier (代限定符) (例如, "Jr.", "3rd", 或 "IV").

这些属性类型的语法和关联的对象标识符 (OIDs) 在附录A的ASN.1模块中提供.

此外, 本规范的实现必须 (MUST) 准备接收 [RFC4519] 中定义的domainComponent属性. 域名系统 (Domain Name System, DNS) 提供分层资源标签系统. 此属性为希望使用与其DNS名称平行的DN的组织提供了便利的机制. 这不是替代名称扩展的dNSName组件的替代品. 实现不需要将此类名称转换为DNS名称. 此属性类型的语法和关联的OID在附录A的ASN.1模块中提供. 有关与domainComponent属性类型一起使用的国际化域名编码规则在第7.3节中指定.

证书用户必须 (MUST) 准备处理issuer可辨别名称和subject可辨别名称 (第4.1.2.6节) 字段以执行证书路径验证 (第6节) 的名称链接. 名称链接是通过将一个证书中的issuer可辨别名称与CA证书中的subject名称匹配来执行的. 比较可辨别名称的规则在第7.1节中指定. 如果证书中issuer和subject字段中的名称根据第7.1节中指定的规则匹配, 则该证书是自颁发的 (self-issued).

4.1.2.5. Validity (有效期)

证书有效期是CA保证其将维护有关证书状态信息的时间间隔. 该字段表示为两个日期的序列 (SEQUENCE): 证书有效期开始的日期 (notBefore) 和证书有效期结束的日期 (notAfter). notBefore和notAfter都可以编码为UTCTime或GeneralizedTime.

符合此配置文件的CA必须 (MUST) 始终将到2049年的证书有效期日期编码为UTCTime; 2050年或以后的证书有效期日期必须 (MUST) 编码为GeneralizedTime. 符合标准的应用程序必须 (MUST) 能够处理以UTCTime或GeneralizedTime编码的有效期日期.

证书的有效期是从notBefore到notAfter的时间段 (包括这两个时间).

在某些情况下, 设备被授予无法分配合适到期日期的证书. 例如, 设备可能会被颁发一个将其型号和序列号绑定到其公钥的证书; 这样的证书旨在用于设备的整个生命周期.

要表示证书没有明确定义的到期日期, notAfter应该 (SHOULD) 被分配GeneralizedTime值99991231235959Z.

当颁发者将无法维护状态信息直到notAfter日期时 (包括notAfter日期为99991231235959Z时), 颁发者必须 (MUST) 确保在终止维护状态信息后, 证书不存在有效的证书路径. 这可以通过到期或撤销包含用于验证证书签名的公钥的所有CA证书, 以及停止使用用于验证证书签名的公钥作为信任锚来实现.

4.1.2.5.1. UTCTime (协调世界时)

通用时间类型UTCTime是用于表示日期和时间的标准ASN.1类型. UTCTime通过两位低阶数字指定年份, 时间指定为一分钟或一秒的精度. UTCTime包括Z (表示Zulu或格林威治标准时间) 或时间差.

就本配置文件而言, UTCTime值必须 (MUST) 以格林威治标准时间 (Zulu) 表示, 并且必须 (MUST) 包括秒 (即, 时间为YYMMDDHHMMSSZ), 即使秒数为零. 符合标准的系统必须 (MUST) 按如下方式解释年份字段 (YY):

  • 当YY大于或等于50时, 年份应 (SHALL) 解释为19YY; 以及
  • 当YY小于50时, 年份应 (SHALL) 解释为20YY.

4.1.2.5.2. GeneralizedTime (通用时间)

通用时间类型GeneralizedTime是用于可变精度时间表示的标准ASN.1类型. 可选地, GeneralizedTime字段可以包括本地时间与格林威治标准时间之间时间差的表示.

就本配置文件而言, GeneralizedTime值必须 (MUST) 以格林威治标准时间 (Zulu) 表示, 并且必须 (MUST) 包括秒 (即, 时间为YYYYMMDDHHMMSSZ), 即使秒数为零. GeneralizedTime值禁止 (MUST NOT) 包括小数秒.

4.1.2.6. Subject (主体)

subject字段标识与存储在主体公钥字段中的公钥相关联的实体. subject名称可以 (MAY) 在subject字段和/或subjectAltName扩展中携带. 如果主体是CA (例如, 如第4.2.1.9节所述, 基本约束扩展存在且cA的值为TRUE), 则subject字段必须 (MUST) 填充与主体CA颁发的所有证书中issuer字段 (第4.1.2.4节) 内容匹配的非空可辨别名称. 如果主体是CRL颁发者 (例如, 如第4.2.1.3节所述, 密钥用途扩展存在且cRLSign的值为TRUE), 则subject字段必须 (MUST) 填充与主体CRL颁发者颁发的所有CRL中issuer字段 (第5.1.2.3节) 内容匹配的非空可辨别名称. 如果主体命名信息仅存在于subjectAltName扩展中 (例如, 密钥仅绑定到电子邮件地址或URI), 则subject名称必须 (MUST) 是空序列, 并且subjectAltName扩展必须 (MUST) 为关键 (critical).

当它非空时, subject字段必须 (MUST) 包含X.500可辨别名称 (DN). 对于由issuer字段定义的一个CA认证的每个主体实体, DN必须 (MUST) 是唯一的. CA可以 (MAY) 向同一主体实体颁发多个具有相同DN的证书.

subject字段定义为X.501类型Name. 此字段的实现要求与issuer字段 (第4.1.2.4节) 定义的相同. 本规范的实现必须 (MUST) 准备接收包含issuer字段所需属性类型的subject名称. 本规范的实现应该 (SHOULD) 准备接收包含issuer字段推荐属性类型的subject名称. 这些属性类型的语法和关联的对象标识符 (OIDs) 在附录A的ASN.1模块中提供. 本规范的实现可以 (MAY) 使用第7.1节中的比较规则来处理不熟悉的属性类型 (即, 用于名称链接), 其属性值使用DirectoryString中的一个编码选项. 当不熟悉的属性类型包含使用DirectoryString中未找到的编码选项的属性值时, 应使用二进制比较. 这允许实现处理subject名称中具有不熟悉属性的证书.

当编码DirectoryString类型的属性值时, 符合标准的CA必须 (MUST) 使用PrintableString或UTF8String编码, 有以下例外:

(a) 当证书的主体是CA时, subject字段必须 (MUST) 以与主体CA颁发的所有证书中issuer字段 (第4.1.2.4节) 编码的相同方式进行编码. 因此, 如果主体CA使用TeletexString、BMPString或UniversalString编码来编码其颁发的证书的issuer字段中的属性, 则颁发给该CA的证书的subject字段必须 (MUST) 使用相同的编码.

(b) 当证书的主体是CRL颁发者时, subject字段必须 (MUST) 以与主体CRL颁发者颁发的所有CRL中issuer字段 (第5.1.2.3节) 编码的相同方式进行编码.

(c) TeletexString、BMPString和UniversalString包含在内以实现向后兼容性, 并且不应该 (SHOULD NOT) 用于新主体的证书. 但是, 在先前已建立名称的证书中可以 (MAY) 使用这些类型, 包括向现有主体颁发新证书的情况, 或向新主体颁发证书的情况, 其中被编码的属性先前已在颁发给其他主体的证书中建立. 证书用户应该 (SHOULD) 准备接收具有这些类型的证书.

存在传统实现, 其中电子邮件地址作为emailAddress属性 [RFC2985] 嵌入到subject可辨别名称中. emailAddress的属性值为IA5String类型, 以允许包含字符'@', 该字符不是PrintableString字符集的一部分. emailAddress属性值不区分大小写 (例如, "[email protected]" 与 "[email protected]" 相同).

生成具有电子邮件地址的新证书的符合标准的实现必须 (MUST) 在主体备用名称扩展 (第4.2.1.6节) 中使用rfc822Name来描述此类身份. 为支持传统实现而在subject可辨别名称中同时包含emailAddress属性已被弃用但允许.

4.1.2.7. Subject Public Key Info (主体公钥信息)

此字段用于携带公钥并识别使用该密钥的算法 (例如, RSA、DSA或Diffie-Hellman). 该算法使用第4.1.1.2节中指定的AlgorithmIdentifier结构进行识别. 支持的算法的对象标识符以及编码公钥材料 (公钥和参数) 的方法在 [RFC3279]、[RFC4055] 和 [RFC4491] 中指定.

4.1.2.8. Unique Identifiers (唯一标识符)

这些字段只能 (MUST) 在版本为2或3 (第4.1.2.1节) 时出现. 如果版本为1, 则这些字段禁止 (MUST NOT) 出现. subject和issuer唯一标识符存在于证书中以处理随时间推移重用subject和/或issuer名称的可能性. 此配置文件建议 (RECOMMENDS) 不要为不同实体重用名称, 并且互联网证书不使用唯一标识符. 符合此配置文件的CA禁止 (MUST NOT) 生成具有唯一标识符的证书. 符合此配置文件的应用程序应该 (SHOULD) 能够解析包含唯一标识符的证书, 但对这些字段的值没有任何处理要求.