启用 SAN 后无法颁发证书?

启用 SAN 后无法颁发证书?

我正在运行 Microsoft CA,默认情况下它没有启用 SAN 字段,因此我通过以下方式启用了它:

certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2

在此之前,一切正常。启用 SAN 字段后,当我提交签名请求时,出现此错误:

Your Request Id is XXX. The disposition message is “Denied by Policy Module
The certificate validity period will be shorter than the  Certificate
Template specifies, because the template validity period is longer than the
maximum certificate validity period allowed by the CA. Consider renewing the 
CA certificate, reducing the template validity period, or increasing the 
registry validity period.

我尝试申请证书的证书模板的有效期为 2 年,而我的颁发 CA 的证书仍然有效期为 1.5 年。如果我使用以下命令恢复 SAN 的标志更改

certutil -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2

然后我就可以像以前一样颁发证书。

我看到了一个可能的解决方案,建议提出以下问题:

certutil -setreg ca\ValidatePeriod "Years"
certutil -setreg ca\ValidityPeriodUnits 5

在我的情况下,这种方法不起作用(试过了),但我不明白这如何解决这个问题,因为归根结底,如果我理解正确的话,我的颁发 CA 证书的到期日期将优先于此。我不明白为什么只有在启用 SAN 字段时才会出现此错误。

我该如何解决这个问题?启用 SAN 是否意味着对 CA 进行进一步检查,而我不知何故错过了?

答案1

看来证书模板中的验证有效性设置超出了 CA 证书的预计有效期。

第二件事是该certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2命令不正确且危险。Microsoft ADCS 默认启用 SAN。任何带有嵌入式 SAN 扩展的有效证书请求都将产生带有 SAN 扩展的证书。此标志允许将 SAN 扩展作为未经身份验证的属性传递(未嵌入在 CSR 中),并且 CA 不会验证 SAN 值。因此,任何用户都可以获得带有任意 SAN 扩展的证书。甚至可以冒充域管理员。这就是为什么EDITF_ATTRIBUTESUBJECTALTNAME2标志必须禁用

有两个选项:

  1. 减少证书模板中的有效期设置,以不超过预计的 CA 证书有效期(例如,将其设置为 1 年)。
  2. 更新 CA 证书以使其有效期更长。

我建议选择第二种方案,因为您将在未来 6 个月内遇到更多问题,并将被迫更新 CA 证书。互联网上有很多文章建议通过重复使用现有密钥对来更新 CA 证书。此解决方案不太麻烦,但可能会引发链验证问题。每次更新 CA 证书时,您都必须生成新的密钥对。

相关内容