我已将 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 支持解决了这个问题,但我不太明白他们是如何解决这个问题的。
挖出了微软的支持说明,希望这些对某些人有用:
- 我们发现 certenroll 文件夹中缺少 CRL,无法验证根 CA 的撤销状态。
- 我们将 CRL 从中级 CA 复制到颁发子 CA,但仍然出现错误。
- 根据调试团队工程师的要求,我们删除并重新安装了 ADCS 角色,但没有帮助。
- 最后,我们在 HKLM\system\CurrentControlSet\Services\Certsvc\Configuration 注册表下发现 CertHash 具有过期证书的旧值。
- 删除旧的哈希值并用 (-) 符号替换它们并启动证书服务。
- 证书服务已成功启动。
答案3
我最近进行了从 2003 到 2012 R2 的迁移,遇到了与您描述的完全相同的问题。CA 可以恢复并正常启动,直到我从旧 CA 导入注册表备份。
在与微软通话并进行几个小时的故障排除后,我们找到了解决方案。我在谷歌上搜索时没有找到这个页面,但这里是:
证书服务器服务未启动,并且您会收到错误:数据无效。0xd (Win32:13) 在基于 Windows 2003 的证书颁发机构上
基本上是证书过期了,或者证书注册表项中缺少私钥CAcerthash
。在我的情况下,证书过期了。
为了解决这个问题
打开证书
mmc
并选择计算机。打开个人证书存储区。
查找不显示私钥图标或已过期的证书。
打开证书并记下详细信息面板中的指纹。您需要将其与注册表中的指纹进行匹配
CAcerthash
。获得指纹后,请检查 CA certhash 注册表中是否存在丢失或过期的证书指纹,并使用减号替换指纹值 -
保存注册表项并尝试启动证书颁发机构。
这对我有用,所以希望其他人也觉得这有用。
答案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。进行这些更改后,证书服务能够无错误地启动。