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 证书中的 signatureAlgorithm 必须包含与序列 tbsCertificate(第 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 如需指明证书没有明确定义的失效日期,应将 notAfter 分配为 GeneralizedTime 值 99991231235959Z。
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 时,才必须显示扩展字段
4.2 证书不得包含特定扩展程序的多个实例。
4.2 如果 CA 签发的证书的主题字段为空序列,则 CA 必须支持主题备用名称扩展项
4.2.1.1 authorityKeyIdentifier 扩展的 keyIdentifier 字段必须包含在符合要求的 CA 生成的所有证书中,以方便构建证书路径。
4.2.1.1 符合要求的 CA 必须将 authorityKeyIdentifier 扩展标记为非关键。
4.2.1.2 为方便证书路径构建,authorityKeyIdentifier 必须出现在所有符合要求的 CA 证书中,即所有包含基本限制扩展(第 4.2.1.9 节)且 cA 值为 TRUE 的证书。
4.2.1.2 符合要求的 CA 必须将正文密钥标识符扩展标记为非关键。
4.2.1.2 为了帮助应用识别合适的最终实体证书,所有最终实体证书中都应包含此扩展
4.2.1.3 如果 keyCertSign 位被断言,则基本限制条件扩展程序(第 4.2.1.9 节)中的 cA 位也必须被断言。
4.2.1.3 当证书中出现 keyUsage 扩展时,必须将至少一位设置为 1。
4.2.1.3 如果存在,符合要求的 CA 应将此密钥用途扩展标记为关键。
4.2.1.4 一个证书政策 OID 不得在证书政策扩展中出现多次。
4.2.1.4 如果限定符与特殊政策 anyPolicy 搭配使用,则必须仅限于本部分中标识的限定符。
4.2.1.4 符合要求的 CA 不应使用 noticeRef 选项。
4.2.1.4 符合要求的 CA 应该使用 UTF8String 编码来表示 explicitText,但也可以使用 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 政策不得映射到特殊值 anyPolicy 或从该值映射
4.2.1.5 政策映射扩展中命名的每个 issuerDomainPolicy 也应在同一证书的证书政策扩展中进行断言。
4.2.1.5 符合要求的 CA 应将此政策映射扩展标记为关键。
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:名称必须同时包含方案(例如 “http”或“ftp”)和特定于方案的部分。
4.2.1.6 包含授权 ([RFC 3986],第 3.2 节) 的 SAN URI 必须包含完全限定域名或 IP 地址作为主机。
4.2.1.6 如果存在 subjectAltName 扩展,则序列必须包含至少一个条目。
4.2.1.6 符合要求的 CA 不得签发包含空 GeneralName 字段的 subjectAltNames 的证书。
4.2.1.6 如果证书中包含 subjectAltName 扩展项,且主题标识名不为空,则符合规范的 CA 应将 subjectAltName 扩展项标记为非关键。
4.2.1.7 颁发者备用名称必须按照 4.2.1.6 中的规定进行编码
4.2.1.7 如果存在,符合要求的 CA 应将此签发者备用名称扩展项标记为非关键。
4.2.1.8 主题目录属性:符合规范的 CA 必须将此扩展标记为非关键。
4.2.1.9 如果出现,pathLenConstraint 字段必须大于或等于零。
4.2.1.9 符合要求的 CA 必须在所有包含用于验证证书上的数字签名的公钥的 CA 证书中包含此扩展程序,并且必须在这些证书中将该扩展程序标记为关键。
4.2.1.9 除非 cA 布尔值为 true 且密钥用途扩展程序断言 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.10 不应对 x400Address、ediPartyName 或 registeredID 名称形式施加名称限制。
4.2.1.11 符合要求的 CA 不得颁发政策限制为空序列的证书。也就是说,必须存在 inhibitPolicyMapping 字段或 requireExplicitPolicy 字段。
4.2.1.11 政策限制:符合要求的 CA 必须将此扩展标记为关键。
4.2.1.12 如果存在 anyExtendedKeyUsage KeyPurposeId,则符合规范的 CA 不应将此扩展标记为关键。
4.2.1.13 DistributionPoint 不得仅包含 reasons 字段;必须存在 distributionPoint 或 cRLIssuer。
4.2.1.13 CRL 分布点扩展程序应为非关键扩展程序
4.2.1.13 如果存在,DistributionPointName 应至少包含一个 LDAP 或 HTTP URI。
4.2.1.13 符合规范的 CA 不应使用 nameRelativeToCRLIssuer 来指定分发点名称。
4.2.1.14 符合要求的 CA 必须将此禁止 anyPolicy 扩展标记为关键。
4.2.1.15 符合要求的 CA 必须将最新 CRL 扩展标记为非关键。
4.2.2.1 符合要求的 CA 必须将此授权信息访问扩展标记为非关键。
4.2.2.1 使用 id-ad-caIssuers accessMethod 时,至少一个实例应指定一个作为 HTTP [RFC 2616] 或 LDAP [RFC 4516] URI 的 accessLocation。
4.2.2.2 符合要求的 CA 必须将此主题信息访问扩展标记为非关键。
7.2 为了在当前结构中容纳国际化域名,符合规范的实现必须在将国际化域名存储到 dNSName 字段之前,按照 RFC 3490 的第 4 节中的规定将其转换为 ASCII 兼容编码 (ACE) 格式。