添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

此外,可能会在应用程序日志事件查看器中记录以下错误消息。

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 文件夹。 你可能会在该文件夹中找到缺少的证书。

    若要修复链接,请执行以下步骤:

  • 打开命令提示符。

  • 键入以下命令,然后按 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 企业证书颁发机构的授权并删除所有相关对象

  •