避免和解决政策冲突

CA Service 中的政策可以是 CA 池的颁发政策,也可以是证书模板。证书颁发政策为 CA 池设置了宽泛的规则,而证书模板则为不同证书类型提供了更具体的说明。如需了解政策控制功能,请参阅政策控制功能简介。政策主要分为以下两个部分:

  • 基准值:基准值(也称为预定义值)是特定政策签发的所有证书的强制性设置。例如,您可以创建一条政策,内容为“根据此政策颁发的每张证书都必须在 keyUsage 扩展中启用 digitalSignature 标志”。这可确保由此政策颁发的所有证书都可以用于数字签名。

  • 扩展限制条件:扩展限制条件用于限制除了政策本身之外,可以将哪些扩展程序添加到证书中。例如,某项政策可能会声明“仅允许在本政策之外向证书添加 AIA-OCSP 扩展”。也就是说,如果有人尝试通过其他政策或直接在证书请求中添加其他扩展(例如主题备用名称),系统会忽略这些扩展。

当您请求证书时,CA 池会使用指定的模板创建证书。不过,附加到 CA 池的颁发政策也会根据自己的规则评估请求。如果证书模板中的设置与添加到 CA 池的证书颁发政策中的设置相冲突,就会发生冲突,因为它们都尝试对同一证书强制执行规则。以下是一些可能的情况:

重叠的扩展程序定义

如果两个政策的基准值中都定义了相同的扩展程序,就会发生冲突。例如,如果您在 CA 池的颁发政策和证书模板中定义了相同的扩展程序 keyUsage,Certificate Authority Service 会将其检测为冲突,即使您在每个位置指定了扩展程序的不同部分也是如此。

示例:

  • 签发政策:要求 keyUsage 扩展程序中包含 digitalSignature: true
  • 证书模板:需要在 keyUsage 扩展中添加 keyEncipherment: true

这仍然被视为冲突,因为证书授权机构服务会将整个扩展程序视为一个单元,并检查扩展程序是否在这两个位置都定义了,而不是检查扩展程序中的具体值。

为避免冲突,请确保仅在 CA 池的签发政策或证书模板中定义一次每个扩展程序,但不能同时在两者中定义。这样可以确保清晰,并防止意外的证书颁发失败。

扩展限制条件和基准值冲突

当一项政策的扩展限制条件与另一项政策的基准值冲突时,就会发生政策冲突。这种情况会在以下情况下发生:

  • 某项政策限制或禁止某个扩展程序:这可能通过对所有扩展程序的普遍排除来实现,也可能通过包含特定允许的扩展程序(不包括相关扩展程序)的列表来实现。
  • 另一项政策要求使用同一扩展程序:这意味着第二项政策为该特定扩展程序定义了基准值。

示例:

  • 发行政策:具有仅允许 keyUsage 扩展程序的扩展程序限制。
  • 证书模板:其基准值中需要包含 certificatePolicies 扩展。

这会导致冲突,因为签发政策会有效禁止使用 certificatePolicies 扩展,而证书模板则要求使用该扩展。

在定义政策时,请仔细考虑基准值和延长期限限制,确保它们协同发挥作用。避免出现一项政策限制另一项政策所要求的扩展程序的情况。这样可以防止冲突,并确保顺利颁发证书。

通用表达式语言 (CEL) 表达式冲突

如果您使用通用表达式语言 (CEL) 进行精细控制,证书模板和签发政策中存在冲突的表达式可能会导致冲突。这些冲突会导致 CA 池无法颁发证书。例如,您可以使用一个表达式来要求域名以 .example.com 结尾,另一个表达式来要求域名以 .example.net 结尾。由于这两个 CEL 表达式对同一字段施加了不同的限制,因此所有证书签发请求都会失败。

如果您同时使用证书颁发政策和证书模板,我们建议您确保它们的 CEL 表达式不会冲突。

在所有这些情况下,CA Service API 都会返回无效参数错误。

解决政策冲突

当 CA Service API 检测到政策冲突时,该 API 会返回无效参数错误,并且证书请求会失败。如需查看和解决政策冲突,请按以下步骤操作:

  1. 点击随错误消息一起显示的发行政策问题排查工具链接。系统随即会显示一个问题排查工具页面,您可以在其中比较 CA 池颁发政策的基准值和扩展限制与证书模板的基准值和扩展限制。请注意,系统会突出显示存在政策冲突的内容。
  2. 访问 CA 池或证书模板,以更新冲突的值并解决冲突。

解决冲突后,请重新提交证书请求。

后续步骤