证书服务无法启动:安全权限已损坏。
Active Directory 证书服务 (AD CS) 会在注册表中记录关键配置设置,如果此信息损坏或被删除,则 Active Directory 证书服务可能无法启动或正常工作。
修复证书颁发机构安全权限
有关基本安全权限的信息存储在注册表中,这些信息是证书颁发机构 (CA) 正常运行所必需的。
要执行这些过程,您必须拥有管理 CA 权限,或者您必须被委派了适当的权限。
要解决安全权限问题,请执行以下操作:
确认安全描述符是否已损坏。
如果您有注册表备份,则可以从备份还原注册表设置。
如果您有 CA 备份,则可以从备份还原 CA。
如果还原过程失败,则请创建 CA 调试日志,并与 Microsoft 客户服务和支持部门联系。有关详细信息,请参见 http://go.microsoft.com/fwlink/?LinkId=89446。
“确认安全描述符损坏”
要确认 CA 安全描述符是否已损坏,请执行以下操作:
打开命令提示符窗口。
键入 certutil -getreg ca\security,然后按 Enter。
“还原 CA 注册表设置”
警告:注册表编辑不当可能导致严重损坏你的系统。更改注册表之前,你应备份任何有价值的数据。
要从配置单元文件还原注册表设置,请执行以下操作:
在托管 CA 的计算机上,单击“开始”,键入 regedit,然后按 Enter。
选择要还原配置单元的项。
在“文件”菜单中,单击“导入”,然后选择驱动器、文件夹或网络计算机以及配置单元所在的文件夹。
在“文件类型”中,单击“注册表配置单元文件”,然后为配置单元选择正确的文件名称。
单击“打开”。当出现配置单元已经被成功导入的消息时,请单击“确定”。
从备份还原 CA
注意:要完成此过程,您需要在发生失败前已经创建了 CA 备份,包括注册表设置、私钥和 CA 证书、证书数据库以及数据库日志。
要还原 CA,请执行以下操作:
如果必须重新安装 Windows,请在还原 CA 前,应用所有当前 Service pack 和安全更新,并重新安装 Active Directory 证书服务 (AD CS)。
在托管 CA 的计算机上,单击“开始”,指向“管理工具”,然后单击“证书颁发机构”。
右键单击 CA 的名称,然后单击“停止”。
使用以上过程,为 CA 导入注册表配置单元。
在证书颁发机构管理单元中,右键单击 CA 名称,单击“所有任务”,然后单击 “还原 CA”。
当证书颁发机构还原向导启动后,单击“下一步”,然后单击“私钥和 CA 证书”。
单击“ 证书数据库和证书数据库日志”。
键入备份文件夹的位置,然后单击“下一步”。
验证备份设置。应显示“颁发的日志和挂起申请”设置。
单击“完成”,然后单击“是”以重新启动 AD CS。
创建 CA 调试日志
要创建调试日志,请执行以下步骤:
在托管 CA 的计算机上,单击“开始”,键入 cmd,然后按 Enter。
键入 certutil -setreg ca\debug 0xffffffe3,然后按 ENTER。
单击“开始”,指向“管理工具”,然后单击“服务”。
选择“Active Directory 证书服务”服务,然后单击“开始”。
当你再次产生问题时,请在 %windir% 目录中找到包含高级诊断信息的 certsrv.log 文件。
在生成诊断结果之后,打开命令提示符窗口,键入 certutil -delreg ca\debug 并按 ENTER 以禁用调试。
要确认证书颁发机构 (CA) 注册表设置,请执行以下操作:
对 CA 的注册表设置进行更改后,单击“开始”,指向“管理工具”,然后单击“证书颁发机构”。
选择 CA 名称,然后单击“重新启动”。
单击“开始”,键入 cmd,然后按 ENTER。
键入 certutil -getreg ca\security,然后按 ENTER。
如果没有其他损坏的设置,则将显示“-getreg 命令已成功完成”。
Target | Microsoft.Windows.CertificateServices.CARole.2016 | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 95 | ||
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.95" 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">95</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="AlertMessageID28e38c0808c649d7b7063997775b7a66"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/PublisherName$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>