Active Directory 证书服务无法启动 - 错误 100

Active Directory 证书服务无法启动 - 错误 100

我已将 Active Directory 证书服务企业 CA 迁移到新服务器(并从 Windows 2003 R2 x86 迁移到 Windows 2008 R2 x64)。我在检查证书吊销列表时遇到了问题,但我已从根 CA 重新发布了吊销列表,当我运行 certutil -urlfetch -verify 时,我不再收到任何错误:

Verified Issuance Policies: None
Verified Application Policies: All
Cert is a CA certificate
Leaf certificate revocation check passed
CertUtil: -verify command completed successfully.

但当我尝试启动 CA 时,仍然出现相同的错误。我收到以下弹出窗口:

Microsoft Active Directory Certificate Services
---------------------------
The system cannot find the file specified. 0x2 (WIN32: 2)

The policy module for a CA is missing or incorrectly registered. To view or change
policy module settings, right-click on the CA, click Properties, and then click the
Policy Module tab.
---------------------------
OK   

我在日志中收到以下错误:

Log Name:      Application
Source:        Microsoft-Windows-CertificationAuthority
Date:          26/06/2012 15:59:45
Event ID:      100
Task Category: None
Level:         Error
Keywords:      Classic
User:          SYSTEM
Computer:      SRV112.cobbsch.cobbetts.co.uk
Description:
Active Directory Certificate Services did not start: Could not load or verify the current CA certificate.  Cobbetts LLP Enterprise CA The system cannot find the file specified. 0x80070002 (WIN32: 2).
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-CertificationAuthority" Guid="{6A71D062-9AFE-4F35-AD08-52134F85DFB9}" EventSourceName="CertSvc" />
    <EventID Qualifiers="49754">100</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2012-06-26T14:59:45.000000000Z" />
    <EventRecordID>852</EventRecordID>
    <Correlation />
    <Execution ProcessID="0" ThreadID="0" />
    <Channel>Application</Channel>
    <Computer>SRV112.cobbsch.cobbetts.co.uk</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <EventData Name="MSG_E_CA_CERT_INVALID">
    <Data Name="CACommonName">Cobbetts LLP Enterprise CA</Data>
    <Data Name="ErrorCode">The system cannot find the file specified. 0x80070002 (WIN32: 2)</Data>
  </EventData>
</Event>

Microsoft 有关于此错误的文档:http://technet.microsoft.com/en-us/library/cc774550(v=ws.10).aspx

但是文档只是谈论了 CA 链没有经过验证,而现在确实如此。

我想知道这是否是某种缓存故障,或者是错误 CRL 的缓存副本(我之前迁移了根 CA,并且必须重新发布 CRL 之后 certutil 才能正确验证),因此我尝试重新启动以清除缓存。

那并没有改变任何事情。

我也尝试以 SYSTEM 身份运行 Certutil 以查看是否存在权限问题,但这也未能解决问题。

[以系统身份运行:从提升的命令提示符运行 psexec -i -s cmd.exe,它将以系统身份启动命令提示符。您可以运行 whoami 进行检查。]

答案1

我遇到了同样的错误。我使用的是 nCipher 的硬件安全模块。ADCS 无法访问其私钥。似乎在启动 ADCS 服务时,它会在检查私钥的人中进行一些测试。因此,我相应地配置了我的 HSM。现在它正常工作了!!!

答案2

我通过 Microsoft 支持解决了这个问题,但我不太明白他们是如何解决这个问题的。

挖出了微软的支持说明,希望这些对某些人有用:

  1. 我们发现 certenroll 文件夹中缺少 CRL,无法验证根 CA 的撤销状态。
  2. 我们将 CRL 从中级 CA 复制到颁发子 CA,但仍然出现错误。
  3. 根据调试团队工程师的要求,我们删除并重新安装了 ADCS 角色,但没有帮助。
  4. 最后,我们在 HKLM\system\CurrentControlSet\Services\Certsvc\Configuration 注册表下发现 CertHash 具有过期证书的旧值。
  5. 删除旧的哈希值并用 (-) 符号替换它们并启动证书服务。
  6. 证书服务已成功启动。

答案3

我最近进行了从 2003 到 2012 R2 的迁移,遇到了与您描述的完全相同的问题。CA 可以恢复并正常启动,直到我从旧 CA 导入注册表备份。

在与微软通话并进行几个小时的故障排除后,我们找到了解决方案。我在谷歌上搜索时没有找到这个页面,但这里是:

证书服务器服务未启动,并且您会收到错误:数据无效。0xd (Win32:13) 在基于 Windows 2003 的证书颁发机构上

基本上是证书过期了,或者证书注册表项中缺少私钥CAcerthash。在我的情况下,证书过期了。

为了解决这个问题

  1. 打开证书mmc并选择计算机。

  2. 打开个人证书存储区。

  3. 查找不显示私钥图标或已过期的证书。

  4. 打开证书并记下详细信息面板中的指纹。您需要将其与注册表中的指纹进行匹配CAcerthash

  5. 获得指纹后,请检查 CA certhash 注册表中是否存在丢失或过期的证书指纹,并使用减号替换指纹值 -

  6. 保存注册表项并尝试启动证书颁发机构。

这对我有用,所以希望其他人也觉得这有用。

答案4

我遇到了类似的问题,从 Windows 2008 R2 升级到 2012 R2 的下属 CA 也遇到了类似的问题。幸运的是,我刚刚使用 Server 2012 R2 构建了一个新的根 CA,我可以与之匹配注册表设置。结果发现,升级后的计算机的 HKLM\system\CurrentControlSet\Services\CertSvc\Configuration\\CSP 键中的某些值与 2012 R2 计算机不匹配。具体来说,“CNGPublicKeyAlgorithm = RSA”丢失,“Provider”需要更改为“Microsoft Software Key Storage Provider”,“ProviderType”需要从 1 更改为 0。进行这些更改后,证书服务能够无错误地启动。

相关内容