我需要制定操作程序来审核并了解特定请求为何被 Active Directory 证书服务 (ADCS) 策略模块拒绝。
我尝试在 GUI 中打开所有日志记录(复选框),并检查了事件日志。我只看到每个失败请求都有一个事件日志条目,但我没有明确的方法来确定导致失败的原因。失败的示例如下:
Active Directory 证书服务拒绝了请求 4,因为证书颁发机构的证书包含无效数据。0x80094005 (-2146877435 CERTSRV_E_INVALID_CA_CERTIFICATE)。该请求针对的是 CN=Issue01a、CN=Bits.com、OU=For email security、O=Bits LLC、C=US。其他信息:被策略模块拒绝
上面的例子是一个子 CA,它的有效期有意超出了父 CA 的有效期。
我希望从上面的错误代码或其他位置得出该原因。
我做了什么: 在谷歌中搜索错误“2146877435”,结果就出现了这篇文章。前几页的结果都没有错误代码和原因的列表。
答案1
此链接描述如何从证书服务中提取更多日志。可能需要重新启动。
要为本机 Windows CertEnroll 客户端启用调试日志记录,请执行以下命令:
Certutil –setreg enroll\debug 0xffffffe3 日志文件位于以下位置:%windir%\CertEnroll.log
certutil –setreg ca\debug 0xffffffe3 日志文件位于以下位置:%windir%\certsrv.log
答案2
值得一提的是,该错误代码的另一个可能原因是策略与尝试的操作不兼容:具体来说,尝试使用 pathlen 为 0 的 CA 签署新的 CA(因此 CA 数据没有任何“无效”之处,它只是一种不适当的操作)。
因为这正是我的问题,所以我想在答案中保留这个评论并进一步详细说明:
在设置根 CA 之前,您必须在C:\Windows\CAPolicy.inf
以下部分的文件中允许子 CA:
[BasicConstraintsExtension]
PathLength=0
如果PathLength
设置为0
,则不允许有子 CA。如果设置为1
,则可以有子 CA。如果设置为2
,则可以有子 CA,子 CA 还可以有子 CA,依此类推。如果未定义或设置为none
,则可以有无限级别的子 CA。安装根 CA 后,您无法更改此值。