此外,可能会在应用程序日志事件查看器中记录以下错误消息。
Active Directory 证书服务未启动:无法加载或验证当前的 CA 证书。 Contoso CA 密钥集不存在0x80090016(-2146893802 NTE_BAD_KEYSET)。
在证书服务启动之前,它枚举已颁发给证书颁发机构(CA)的所有密钥和证书,即使密钥和证书已过期。 如果其中任何一个证书已从本地计算机个人证书存储中删除,则证书服务不会启动。
若要解决此问题,请验证注册表中的证书指纹数是否等于已颁发给 CA 的证书数。 如果缺少任何证书,请将缺少的证书导入到本地计算机个人证书存储中。 导入缺少的证书后,使用
certutil -repairstore
命令修复导入的证书与关联的私钥存储之间的链接。
若要解决此问题,请执行这些步骤。
步骤 1:查找缺少的证书
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关详细信息,请参阅
如何在 Windows
中备份和还原注册表。
证书指纹指示已颁发给此 CA 的所有证书。 每次续订证书时,都会将新的证书指纹添加到注册表中的 CaCertHash 列表中。 此列表中的条目数必须与颁发给 CA 的证书数相等,并且这些证书列在本地计算机个人证书存储中。
若要查找缺少的证书,请执行以下步骤:
选择“开始”
,键入
regedit
,然后按
Enter
。
找到并选择以下子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<Your_Certificate_Authority_Name>
在右窗格中,双击
CaCertHash
。
记下值数据
列表包含的证书指纹
数。
启动命令提示符。
键入以下命令,然后按 Enter
:
certutil -store
将本地计算机个人证书存储中列出的证书数与 CaCertHash 注册表项中列出的证书指纹数进行比较。 如果数字不同,请转到 步骤 2:导入缺少的证书。 如果数字相同,请转到 步骤 3:修复链接。
步骤 2:导入缺少的证书
选择“开始”,键入 mmc,然后按 Enter。
在“文件”菜单中,选择“添加/删除管理单元”。
在管理单元列表中,选择“证书”,然后选择“添加”。
出现“证书”管理单元对话框时,选择“计算机帐户”,然后选择“下一步>完成”。
选择“确定”。 证书目录现已添加到Microsoft管理控制台(MMC)。
展开“证书个人”,右键单击“证书>”,指向“所有任务”,然后选择“导入”。
在“欢迎”页上,选择“下一步”。
在“要导入的文件”页上,在“文件名”框中键入要导入的证书文件的完整路径,然后选择“下一步”。 而是选择“浏览”,搜索文件,然后选择“下一步”。
如果要导入的文件是个人信息 Exchange-PKCS #12 (*)。PFX) 文件,系统会提示输入密码。 键入密码,选择 将此密钥标记为可 导出的导入选项,然后选择“ 下一步”。
在 “证书存储 ”页上,选择“ 下一步”。
在 “完成证书导入向导 ”页上,选择“ 完成”。
默认情况下,CA 将其 CA 证书发布到 %systemroot%\System32\CertSvc\CertEnroll 文件夹。 你可能会在该文件夹中找到缺少的证书。
步骤 3:修复链接
若要修复链接,请执行以下步骤:
打开命令提示符。
键入以下命令,然后按 Enter:
cd %systemroot%\system32\certsrv\certenroll
记下 certenroll 文件夹中类似于以下内容的证书:
<Your_Server>. <Your_Domain>.com_rootca.crt
键入以下命令,然后在每个命令后按 Enter :
certutil -addstore my %systemroot%\system32\certsrv\certenroll\Your_Server.Your_Domain.com_rootca.crt
certutil -dump %systemroot%\system32\certsrv\certenroll\Your_Server.Your_Domain.com_rootca.crt
<Your_Server>.<Your_Domain>.com_rootca.crt
是步骤 3 中记录的 certenroll 文件夹中的证书的名称。
在最后一个命令的输出中,在末尾附近,你将看到如下所示的行:
Key Id Hash(sha1): ea c7 7d 7e e8 cd 84 9b e8 aa 71 6d f4 b7 e5 09 d9 b6 32 1b
数据 Key Id Hash
特定于计算机。 记下此行。
键入以下命令,包括引号,然后按 Enter:
%systemroot%\system32\certutil -repairstore my "<Key_Id_Hash_Data>"
在此命令中, Key_Id_Hash_Data
是你在步骤 5 中记录的行。 例如,请键入以下内容:
certutil -repairstore my "ea c7 7d 7e e8 cd 84 9b e8 aa 71 6d f4 b7 e5 09 d9 b6 32 1b"
然后,你将收到以下输出:
CertUtil: -repairstore command completed successfully.
若要验证证书,请键入以下命令,然后按 Enter:
certutil -verifykeys
此命令运行后,你将收到以下输出:
CertUtil: -verifykeys command completed successfully.
步骤 4:启动证书服务服务
选择开始,指向管理工具,然后选择服务。
右键单击 “证书服务”,然后选择“ 启动”。
如果满足以下条件之一,则必须解除授权并替换 CA:
找不到缺少的证书。
无法重新安装证书。
certutil -repairstore
命令无法完成,因为私钥已被删除。
如果此问题发生在公钥基础结构 (PKI) 层次结构的根 CA 上,如果无法修复该问题,则必须替换整个 PKI 层次结构。 有关如何删除 PKI 层次结构的详细信息,请参阅 如何解除 Windows 企业证书颁发机构的授权并删除所有相关对象。