证书服务无法处理申请。
证书颁发机构 (CA) 的一个重要功能是评估来自客户端的证书申请,并且在满足预定义的条件时向这些客户端发出证书。要想成功注册证书,在提交申请之前必须准备好一定的资料,包括具有有效 CA 证书的 CA;正确配置的证书模板、客户端帐户和证书申请;客户端向 CA 提交申请的方式,验证申请,并安装签发的证书。
解决妨碍证书申请处理的问题
有许多问题都可能会阻碍证书申请的处理。如果事件日志消息未包含更正问题所需要的全部信息,在此事件日志消息前后发出的其他错误和警告可帮助您确定原因。
要确定并解决妨碍证书申请处理的问题,需:
确认证书颁发机构 (CA) 的证书链。
生成和发布新的证书吊销列表 (CRL)。
确认已配置的 CRL 分发点。
如果这些步骤没有解决问题,请检查 CA 上失败的申请队列,以获取有关申请失败原因的信息。
若要执行以下过程,您必须拥有管理 CA 的权限,或者您必须被委派了适当的权限。
确认 CA 的证书链
要验证 CA 的链,请执行以下操作:
单击“开始”,键入 mmc,然后按 ENTER。
如果出现“用户帐户控制”对话框,请确认它显示的是所需操作,然后单击“继续”。
在“文件”菜单上,依次单击“添加/删除管理单元”、“证书”、“添加”。
单击“计算机”帐户,然后单击“下一步”。
选择托管 CA 的计算机,单击“完成”,然后单击“确定”。
选择证书链中的每个 CA 证书,然后单击“查看证书”。
单击“详细信息”选项卡,然后单击“复制到文件”以启动“证书导出向导”。保存每个证书,扩展名为 .cer。
打开命令提示符,在各个 CA 证书上运行命令 certutil -urlfetch -verify <CAcert.cer>,然后按 ENTER。使用您在步骤 7 中保存的 CA 证书文件的名称替换 <CAcert.cer>。
对 CA 颁发的最终实体(用户或计算机)证书的证书文件使用相同的命令,以确认 CA 自身以及其链的 CRL。
解决命令行输出中标识的任何问题。
生成和发布新的 CRL
如果命令行输出显示 CA 的 CRL 已过期,则在 CA 上生成新的基本和增量 CRL,并将其复制到所需的位置。您可能需要重新启动脱机 CA 才能完成该操作。
在 CA 上检查当前发布的 CRL。默认情况下,CA 在文件夹 %windir%\System32\CertSrv\CertEnroll 中创建 CRL。如果当前在该位置的 CRL 已过期或失效,您可以执行下列过程发布新的 CRL。
要使用证书颁发机构管理单元发布新的 CRL,请执行以下操作:
在托管 CA 的计算机上,单击“开始”,指向“管理工具”,然后单击“证书颁发机构”。
选择 CA,然后展开 CA 名称下的文件夹。
右键单击“吊销的证书”文件夹。
单击“所有任务”,然后单击“发布”。
您也可以通过命令提示符生成和发布 CRL。
要使用 Certutil 命令行工具发布 CRL,请执行以下操作:
在托管 CA 的计算机上,单击“开始”,键入 cmd,然后按 ENTER。
键入 certutil -CRL,然后按 ENTER。
如果 CRL 标识为不可用,但是 CA 上的本地目录中存在有效的 CRL,请确认 CA 是否可以连接到 CRL 分发点,然后使用上述的步骤重新生成和发布 CRL。
使用以下命令可以手动将 CRL 发布到 Active Directory 域服务 (AD DS):
certutil -dspublish"<crlname.crl>" ldap:///CN=<CA name>,CN=<CA hostname>,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=<contoso>,DC=<com>?certificateRevocationList?base?objectClass=cRLDistributionPoint
用 CRL 文件的名称替换 crlname.crl,并用 CA 名称和运行 CA 的主机的名称替换 <CA name> 和 <CA hostname>,然后用您的 Active Directory 域的命名空间替换 <contoso> 和 <com>。
确认已配置的 CRL 分发点
检查所有已配置的 CRL 分发点,以确认发布是否成功及新的 CRL 是否可以在网络中使用。
若要使用证书颁发机构管理单元检查已配置的 CRL 分发点,请执行以下操作:
在托管 CA 的计算机上,单击“开始”,指向“管理工具”,然后单击“证书颁发机构”。
右键单击 CA 的名称,然后单击“属性”。
单击“扩展名”选项卡。
检查已配置的 CRL 分发点,以确保信息准确无误。
要使用 Certutil 检查已配置的 CRL 分发点 URL,请执行以下操作:
在 CA 中打开一个命令提示符窗口。
键入以下命令:certutil -getreg ca\crlpublicationurls,然后按 ENTER。
检查 CA 中失败的申请队列
要使用证书颁发机构管理单元检查 CA 中失败的申请队列,请执行以下操作:
在托管 CA 的计算机上,单击“开始”,指向“管理工具”,然后单击“证书颁发机构”。
单击“失败的申请”文件夹。
查找出现事件时或相近的时间内提交的失败申请,然后检查“申请处理消息”、“申请状态码”和“申请人姓名”等列,以获取更多诊断信息。
要使用 Certutil 检查失败的申请,请执行以下操作:
在托管 CA 的计算机上,单击“开始”,键入 cmd,然后按 ENTER。
键入 certutil -view LogFail,然后按 ENTER。
键入 certutil -view -restrict requestID="<nnn>",然后按 ENTER。使用 LogFail 命令输出中失败的请求之一的请求 ID 替换 <nnn>。
要确认证书申请处理是否正常,请执行以下操作:
单击“开始”,键入 certmgr.msc,然后按 ENTER。
如果出现“用户帐户控制”对话框,请确认它显示的是所需操作,然后单击“继续”。
在控制台树中双击“个人”,然后单击“证书”。
在“操作”菜单中,指向“所有任务”,然后单击“申请新证书”以启动“证书注册”向导。
使用此向导可为任何类型的可用证书创建和提交证书申请。
在“证书安装结果”下,确认注册已成功完成,且没有报错。您还可以单击“详细信息”,以查看有关该证书的其他信息。
Target | Microsoft.Windows.CertificateServices.CARole.6.2 | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 22 | ||
Event Source | Microsoft-Windows-CertificationAuthority | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | High | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DS | DataSource | Microsoft.Windows.EventProvider | Default |
Alert | WriteAction | System.Health.GenerateAlert | Default |
WriteToCertSvcEvents | WriteAction | Microsoft.Windows.CertificateServices.CARole.CertSvcEvents.Publisher | Default |
WriteToDB | WriteAction | Microsoft.SystemCenter.CollectEvent | Default |
<Rule ID="Microsoft.Windows.CertificateServices.CARole.6.2.CertSvcEvents.22" Enabled="onEssentialMonitoring" Target="CSDisc!Microsoft.Windows.CertificateServices.CARole.6.2" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">22</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Microsoft-Windows-CertificationAuthority</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="WriteToDB" TypeID="SC!Microsoft.SystemCenter.CollectEvent"/>
<WriteAction ID="WriteToCertSvcEvents" TypeID="Microsoft.Windows.CertificateServices.CARole.CertSvcEvents.Publisher"/>
<WriteAction ID="Alert" TypeID="Health!System.Health.GenerateAlert">
<Priority>2</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="AlertMessageID515b77767c984710bc8f71a810107927"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/PublisherName$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>