我的 Win7 机器上的证书存储一直挂起。观察:
1.cmd 目录 C:\>certutil -? | findstr /i ping -ping -- Ping Active Directory 证书服务请求接口 -pingadmin -- Ping Active Directory 证书服务管理界面 C:\>设置 PROMPT=$P($t)$G C:\(13:04:28.57)>certutil -ping CertUtil:-ping 命令失败:0x80070002(WIN32:2) CertUtil:系统找不到指定的文件。 C:\(13:04:58.68)>certutil -pingadmin CertUtil:-pingadmin 命令失败:0x80070002(WIN32:2) CertUtil:系统找不到指定的文件。 C:\(13:05:28.79)>设置 PROMPT=$P$G 目录:\>
解释:
- 第一个命令显示certutil有
–ping
和参数–pingadmin
- 尝试任何 ping 参数都会失败,超时时间为 30 秒(当前时间显示在提示符中)
这是一个严重的问题。它破坏了我应用程序中的所有安全通信。如果有人知道如何修复这个问题 - 请分享。
谢谢。
附言
1.cmd 只是这些命令的批处理:
certutil -? | findstr /i ping
set PROMPT=$P($t)$G
certutil -ping
certutil -pingadmin
set PROMPT=$P$G
编辑1
我已经成功确定了导致问题的单个 Windows API -获取域名称
根据 windbg,证书实用程序像这样调用它:
PDOMAIN_CONTROLLER_INFO pdci;
DWORD ret = ::DsGetDcName(NULL, NULL, NULL, NULL, DS_DIRECTORY_SERVICE_PREFERRED, &pdci);
在我的工作站上,它超时 30 秒,然后返回错误代码 1355,这是ERROR_NO_SUCH_DOMAIN
指定域没有可用的域控制器或该域不存在。
在另一台机器上(碰巧是 Windows Server 2003),它几乎立即返回,并在返回的DOMAIN_CONTROLLER_INFO
结构中返回正确的域控制器名称。
现在的问题是,我的工作站上缺少什么才能让该 API 找到正确的域控制器?
答案1
请检查以下内容
您能逃离
certutil -ping -config "cadnsname\CA logical name"
受影响的主机吗?谁有权限向 CA 申请证书(是否有人将经过身份验证的用户更改为域用户)?
查看 DCOM 权限以确保经过身份验证的用户在 CA 上具有正确的权限。CA 上证书服务 DCOM 访问组的 DCOM 权限:
访问权限级别 -> 本地访问 - 允许,远程访问 - 允许启动和激活权限级别 -> 远程启动 - 允许,远程激活 - 允许
有关更多详细信息,您可以参考以下 URL 进行故障排除。