证书服务无法创建交叉证书。
当更新了根证书颁发机构 (CA) 证书后,原始根证书和更新后的根证书在公钥层次结构中仍然同样重要。原始根 CA 证书仍然是层次结构的最终信任基础,可帮助验证在原始层次结构下发出的所有证书的证书链。续订的根 CA 证书为层次结构中从续订日期开始颁发的所有证书提供了信任基础。
为了支持这些方案,还创建了一对交叉 CA 证书,以便在原始根证书和更新后的根证书之间建立信任关系:
第一个交叉证书验证原始根 CA 证书是否信任更新后的 CA 证书。
第二个交叉证书验证更新后的 CA 证书是否信任原始根证书。
如果更改了 CA 密钥,独立的 CA 将生成自签名的交叉证书。在每个根证书的生存期重叠的时间段内,每次密钥切换时会生成一个交叉证书。
.
当使用新密钥更新根证书颁发机构 (CA) 证书时,CA 将自动在旧 CA 证书和新 CA 证书之间生成交叉证书。如果在交叉证书签名时发生加密失败,可以通过更正扩展名冲突来解决此问题。否则,将启用 CryptoAPI 2.0 诊断功能来收集其他疑难解答信息。
要执行这些过程,您必须拥有管理 CA 权限,或者您必须被委派了适当的权限。
“解决扩展名冲突”
要解决扩展名冲突,请执行以下操作:
单击“开始”,键入 mmc,然后按 ENTER。
如果显示“用户帐户控制”对话框,请确认显示的操作正是你要执行的操作,然后单击“继续”。
在“文件”菜单上,依次单击“添加/删除管理单元”、“证书”、“添加”。
单击“计算机”帐户,然后单击“下一步”。
选择托管 CA 的计算机,单击“完成”,然后单击“确定”。
单击“详细信息”选项卡,然后单击“显示:仅扩展名”。
双击之前的 CA 证书,然后查看此证书配置的扩展名。
将最新 CA 证书内的扩展名与之前 CA 证书内的扩展名进行比较。
通过重新配置证书申请并提交新证书申请来更正扩展名之间的不匹配。
注意:有关配置自定义证书申请的信息,请参阅“Advanced Certificate Enrollment and Management”( http://go.microsoft.com/fwlink/?LinkID=74577)。
启用 CryptoAPI 2.0 诊断功能
要启用 CryptoAPI 2.0 诊断功能,请执行以下操作:
在托管 CA 的计算机上,单击“开始”,指向“管理工具”,然后单击“事件查看器”。
在控制台树中,展开“事件查看器”、“应用程序和服务日志”、“Microsoft”、“Windows”、“CAPI2”。
右键单击“可操作”,然后单击“启用日志”。
单击“开始”,指向“管理工具”,然后单击“服务”。
右键单击“Active Directory 证书服务”,然后单击“重新启动”。
查找任何 CA 证书验证或链接错误。排除错误,然后再次重新启动 CA。
如果扩展名正确,且 CA 证书验证和链接也正确,则在 CA 重新启动时应自动生成缺失的交叉 CA 证书。
要验证在 CA 证书更新期间证书颁发机构 (CA) 是否能够创建交叉证书对其自身证书进行认证,请执行以下操作:
在托管 CA 的计算机上,单击“开始”,指向“管理工具”,然后单击“证书颁发机构”。
在控制台树中,单击 CA 的名称。
在“操作”菜单上,指向“所有任务”,然后单击“更新 CA 证书”,以启动“证书更新向导”。
在计算机上打开“证书”管理单元,然后双击 CA 证书。
单击“详细信息”选项卡,然后单击“显示:”“仅扩展名”。
双击之前的 CA 证书,然后查看此证书配置的扩展名。
将最新 CA 证书内的扩展名与之前 CA 证书内的扩展名进行比较,以确认它们是否匹配。
Target | Microsoft.Windows.CertificateServices.CARole.2016 | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 102 | ||
Event Source | Microsoft-Windows-CertificationAuthority | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | High | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DS | DataSource | Microsoft.Windows.EventProvider | Default |
Alert | WriteAction | System.Health.GenerateAlert | Default |
WriteToCertSvcEvents | WriteAction | Microsoft.Windows.CertificateServices.CARole.CertSvcEvents.Publisher | Default |
WriteToDB | WriteAction | Microsoft.SystemCenter.CollectEvent | Default |
<Rule ID="Microsoft.Windows.CertificateServices.CARole.2016.CertSvcEvents.102" Enabled="true" Target="CSDisc!Microsoft.Windows.CertificateServices.CARole.2016" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">102</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Microsoft-Windows-CertificationAuthority</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="WriteToDB" TypeID="SC!Microsoft.SystemCenter.CollectEvent"/>
<WriteAction ID="WriteToCertSvcEvents" TypeID="Microsoft.Windows.CertificateServices.CARole.CertSvcEvents.Publisher"/>
<WriteAction ID="Alert" TypeID="Health!System.Health.GenerateAlert">
<Priority>2</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="AlertMessageID45e4d639a5ed47f4b4f4ae5914594727"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/PublisherName$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>