RFC 合规性
Certificate Authority Service 使用 ZLint 工具来确保 X.509 证书符合 RFC 5280 规则。不过,CA Service 不会强制执行所有 RFC 5280 要求,因此使用 CA Service 创建的 CA 可能会颁发不合规的证书。
CA Service 会强制执行以下 RFC 5280 要求。
| RFC 5280 部分 | lint 子句 |
|---|---|
| 4.1.1.2 | Certificate 中的 signatureAlgorithm 必须包含与序列 tbsCertificate 中的 signature 字段相同的算法标识符(第 4.1.2.3 节)。 |
| 4.1.2.1 | 使用扩展程序时,版本必须为 3(值为 2),如此配置文件中所述。 |
| 4.1.2.2 | 序列号必须是 CA 为每个证书分配的正整数。 |
| 4.1.2.2 | 符合规范的 CA 不得使用长度超过 20 个八字节的 serialNumber 值。 |
| 4.1.2.4 | 签发者字段必须包含非空标识名 (DN)。 |
| 4.1.2.5 | 符合此配置文件的 CA 必须始终将 2049 年之前的证书有效期编码为 UTCTime |
| 4.1.2.5.1 | UTCTime 值必须以格林尼治标准时间 (Zulu) 表示 |
| 4.1.2.5.1 | UTCTime 值必须包含秒数 |
| 4.1.2.5.2 | GeneralizedTime 值必须以格林尼治标准时间 (Zulu) 表示 |
| 4.1.2.5.2 | GeneralizedTime 必须包含秒数 |
| 4.1.2.5.2 | GeneralizedTime 值不得包含秒数小数部分 |
| 4.1.2.6 | 如果正文是 CA(例如,存在基本约束条件扩展,如第 4.2.1.9 节所述,并且 cA 的值为 TRUE),则必须在正文 CA 颁发的所有证书中,将正文字段填充为与颁发者字段(第 4.1.2.4 节)内容匹配的非空特有名称。 |
| 4.1.2.8 | 只有在版本为 2 或 3 时,才必须显示唯一标识符字段 |
| 4.1.2.8 | 符合此配置文件的 CA 不得生成包含唯一标识符的证书。 |
| 4.1.2.9 | 仅当版本为 3 时,才应显示“Extensions”字段 |
| 4.2 | 证书不得包含多个特定扩展程序实例。 |
| 4.2 | 如果 CA 签发的证书的主题字段序列为空,则 CA 必须支持主题备用名称扩展 |
| 4.2.1.1 | 为了便于构建认证路径,符合条件的 CA 生成的所有证书都必须包含 authorityKeyIdentifier 扩展的 keyIdentifier 字段。 |
| 4.2.1.1 | 符合规范的 CA 必须将 authorityKeyIdentifier 扩展标记为非关键扩展。 |
| 4.2.1.2 | 为方便构建认证路径,所有符合条件的 CA 证书(即包含基本约束条件扩展 [第 4.2.1.9 节] 且 cA 值为 TRUE 的所有证书)中都必须包含 authorityKeyIdentifier。 |
| 4.2.1.2 | 符合规范的 CA 必须将主题密钥标识符扩展标记为非关键。 |
| 4.2.1.3 | 如果声明了 keyCertSign 位,则还必须声明基本限制条件扩展(第 4.2.1.9 节)中的 cA 位。 |
| 4.2.1.3 | 当证书中显示 keyUsage 扩展时,必须将其中至少一个位设置为 1。 |
| 4.2.1.4 | 证书政策 OID 不得在证书政策扩展中出现多次。 |
| 4.2.1.4 | 将限定符与特殊政策 anyPolicy 搭配使用时,必须仅限于本部分中指定的限定符。 |
| 4.2.1.5 | 不得将政策映射到或从特殊值 anyPolicy |
| 4.2.1.6 | 每当要将此类身份(SAN 中的任何内容)绑定到证书时,都必须使用主题备用名称(或签发者备用名称)扩展; |
| 4.2.1.6 | 如果正文字段包含空序列,则签发 CA 必须添加标记为关键的 subjectAltName 扩展。 |
| 4.2.1.6 | 当 subjectAltName 扩展包含互联网邮件地址时,该地址必须存储在 rfc822Name 中。 |
| 4.2.1.6 | 对于 IP 版本 4,如 [RFC 791] 中所指定,八位字符串必须包含正好四个八位字符。对于 IP 版本 6,如 [RFC 2460] 中所指定,八字节字符串必须包含正好 16 个八字节。 |
| 4.2.1.6 | 当 subjectAltName 扩展包含域名系统标签时,域名必须存储在 dNSName(IA5String)中。 |
| 4.2.1.6 | SAN:dNSName 必须采用“首选名称语法” |
| 4.2.1.6 | 不得使用 dNSName 为“”的 subjectAltName 扩展 |
| 4.2.1.6 | 不得使用 DNS 表示法来表示互联网邮件地址(subscriber.example.com 而非 subscriber@example.com) |
| 4.2.1.6 | 当 subjectAltName 扩展包含 URI 时,名称必须存储在 uniformResourceIdentifier(IA5String)中。 |
| 4.2.1.6 | SAN URI:名称不得是相对 URI,并且必须遵循 [RFC 3986] 中指定的 URI 语法和编码规则。 |
| 4.2.1.6 | SAN URI:名称必须同时包含 scheme(例如 “http”或“ftp”)和 scheme-specific-part。 |
| 4.2.1.6 | 包含授权机构 ([RFC 3986],第 3.2 节) 的 SAN URI 必须包含完全限定域名或 IP 地址作为主机。 |
| 4.2.1.6 | 如果存在 subjectAltName 扩展,序列必须包含至少一个条目。 |
| 4.2.1.6 | 符合规范的 CA 不得颁发 subjectAltNames 包含空 GeneralName 字段的证书。 |
| 4.2.1.7 | 颁发者备用名称必须采用 4.2.1.6 中所述的编码方式 |
| 4.2.1.8 | 主题目录属性:符合规范的 CA 必须将此扩展标记为非关键。 |
| 4.2.1.9 | 在出现的位置,pathLenConstraint 字段必须大于或等于零。 |
| 4.2.1.9 | 符合规范的 CA 必须在包含用于验证证书数字签名的公共密钥的所有 CA 证书中添加此扩展,并且必须在这些证书中将此扩展标记为关键扩展。 |
| 4.2.1.9 | 除非声明了 cA 布尔值且密钥用途扩展声明了 keyCertSign 位,否则 CA 不得包含 pathLenConstraint 字段。 |
| 4.2.1.10 | 名称限制扩展(必须仅在 CA 证书中使用)用于指明一个命名空间,证书链中后续证书中的所有正文名称都必须位于该命名空间中。 |
| 4.2.1.10 | 名称限制条件:符合规范的 CA 必须将此扩展标记为关键 |
| 4.2.1.10 | 符合规范的 CA 不得颁发名称限制条件为空序列的证书。也就是说,必须包含 permittedSubtrees 字段或 excludedSubtrees 字段。 |
| 4.2.1.10 | 在此配置文件中,最小值和最大值字段不与任何名称形式搭配使用,因此最小值必须为零,并且必须不存在最大值。 |
| 4.2.1.10 | iPAddress 的语法必须如第 4.2.1.6 节所述,并附加以下专门针对名称约束条件的说明:对于 IPv4 地址,GeneralName 的 iPAddress 字段必须包含八 (8) 个字节,采用 RFC 4632 (CIDR) 编码方式表示地址范围 [RFC 4632]。对于 IPv6 地址,iPAddress 字段必须包含 32 个以类似方式编码的八字节。 |
| 4.2.1.11 | 合规 CA 不得颁发政策约束条件为空序列的证书。也就是说,必须包含 inhibitPolicyMapping 字段或 requireExplicitPolicy 字段。 |
| 4.2.1.11 | 政策限制:符合政策要求的 CA 必须将此扩展标记为关键。 |
| 4.2.1.13 | DistributionPoint 不得仅包含 reasons 字段;必须包含 distributionPoint 或 cRLIssuer。 |
| 4.2.1.14 | 符合规范的 CA 必须将此 Inhibit anyPolicy 扩展标记为关键。 |
| 4.2.1.15 | 符合规范的 CA 必须将最新的 CRL 扩展标记为非关键。 |
| 4.2.2.1 | 符合规范的 CA 必须将此授权信息访问扩展标记为非关键扩展。 |
| 4.2.2.2 | 符合规范的 CA 必须将此 Subject Information Access 扩展标记为非关键扩展。 |
| 4.1.2.5 | 如需指明证书没有明确定义的失效日期,应为 notAfter 分配 GeneralizedTime 值 99991231235959Z。 |
| 4.2.1.2 | 为帮助应用识别适当的最终实体证书,所有最终实体证书都应包含此扩展 |
| 4.2.1.3 | 如果存在,符合规范的 CA 应将此密钥用途扩展标记为关键。 |
| 4.2.1.4 | 合规的 CA 不应使用 noticeRef 选项。 |
| 4.2.1.4 | 符合规范的 CA 应对 explicitText 使用 UTF8String 编码,但可以使用 IA5String。 |
| 4.2.1.4 | explicitText 字符串不应包含任何控制字符(例如U+0000 到 U+001F 和 U+007F 到 U+009F)。 |
| 4.2.1.4 | 使用 UTF8String 编码时,所有字符序列都应根据 Unicode 标准化表单 C (NFC) 进行标准化 |
| 4.2.1.5 | 政策映射扩展中命名的每个 issuerDomainPolicy 也应在同一证书的证书政策扩展中声明。 |
| 4.2.1.5 | 符合政策的 CA 应将此“政策映射”扩展标记为关键。 |
| 4.2.1.6 | 在包含非空主题标识名的证书中添加 subjectAltName 扩展程序时,符合条件的 CA 应将 subjectAltName 扩展程序标记为非关键扩展程序。 |
| 4.2.1.7 | 如果存在,符合条件的 CA 应将此颁发者备用名称扩展标记为非关键扩展。 |
| 4.2.1.10 | 不应对 x400Address、ediPartyName 或 registeredID 名称形式施加名称约束。 |
| 4.2.1.12 | 如果存在 anyExtendedKeyUsage KeyPurposeId,则合规的 CA 不应将此扩展标记为关键扩展。 |
| 4.2.1.13 | CRL 分发点扩展程序应是非关键扩展程序 |
| 4.2.1.13 | DistributionPointName(如果有)应包含至少一个 LDAP 或 HTTP URI。 |
| 4.2.1.13 | 符合规范的 CA 不应使用 nameRelativeToCRLIssuer 指定分发点名称。 |
| 4.2.2.1 | 使用 id-ad-caIssuers accessMethod 时,至少一个实例应指定一个 accessLocation,该 accessLocation 应为 HTTP [RFC 2616] 或 LDAP [RFC 4516] URI。 |
| 7.2 | 为了在当前结构中容纳国际化域名,符合规范的实现必须先将国际化域名转换为 RFC 3490 第 4 节中指定的 ASCII 兼容编码 (ACE) 格式,然后再存储在 dNSName 字段中。 |