我已将我的 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,并且必须在 certutil 正确验证之前重新发布 CRL),所以我尝试重新启动以清除缓存。
那并没有改变任何事情。
我还尝试以 SYSTEM 身份运行 Certutil 以查看是否存在权限问题,但这也没有解决问题。
[作为系统运行:从提升的命令提示符运行 psexec -i -s cmd.exe,它将作为系统启动命令提示符。你可以运行 whoami 来检查。]
我通过 Microsoft 支持解决了这个问题,但我并不真正理解他们是如何解决这个问题的。
挖出 Microsoft 支持说明,希望这些对某人有用:
我有同样的错误。我使用的是 nCipher 的硬件安全模块。ADCS 无法访问其私钥。似乎在启动 ADCS 服务时,它会在检查私钥的那些人中进行一些测试。因此,我相应地配置了我的 HSM。现在可以了!!!
我最近进行了 2003 年到 2012 年 R2 的迁移,遇到了与您描述的完全相同的问题。在我从旧 CA 导入注册表备份之前,CA 会恢复并正常启动。
在与 Microsoft 通话并进行了几个小时的故障排除后,我们找到了解决方案。我在任何谷歌搜索中都没有找到这个页面,但它是:
证书服务器服务未启动并且您收到错误:数据无效。基于 Windows 2003 的证书颁发机构上的 0xd (Win32:13)
基本上,证书过期或证书缺少
CAcerthash
注册表项中的私钥。就我而言,这是一个过期的证书。为了解决问题
打开证书
mmc
并选择计算机。打开个人证书存储。
查找不显示私钥图标或过期日期已过的证书。
打开证书并记下详细信息中的指纹。您需要将其与
CAcerthash
注册表中存在的指纹进行匹配。获得指纹后,请检查 CA certhash 注册表中是否存在丢失或过期的证书指纹,并将指纹值替换为减号 -
保存注册表项并尝试启动证书颁发机构。
这对我有用,所以希望其他人觉得这有帮助。
如果您更改了操作系统 SKU,则可能会发生此错误。例如,从 2003 Enterprise 到 2008 R2 Standard Edition。您没有提及 SKU 和操作系统详细信息。
假设情况并非如此,那么要解决此问题,您需要收集以下信息
启用调试日志,启动 procmon 并尝试启动该服务。当服务启动失败时停止 procmon。
如果你把它们分享到某个地方,我可以看看。
我遇到了从 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。进行这些更改后,证书服务能够正常启动。