我最近在 Windows 2012 R2 服务器上设置了一个新的加入域的独立 CA,该 CA 可以公开访问,并且可以正常进行身份验证,但是,已撤销的证书似乎仍在进行身份验证。实际的服务器端撤销过程运行良好,因为已撤销的证书在发布后被添加到 CRL 中,但证书仍可对客户端进行身份验证。
我添加了外部可访问的 CDP 和 AIA 位置,并使用以下命令清除了客户端的本地 CRL 缓存:
certutil -urlcache CRL delete
&
certutil -setreg chain\ChainCacheResyncFiletime @now
我知道最后一条命令的最低操作系统要求。客户端是 Windows 7 及以上版本。
我在客户端上使用一个简单的测试应用程序,该应用程序配置为使用一个证书,因此如果证书被撤销,它就会停止工作,但在这种情况下并非如此。如果我从本地证书存储中删除证书,它就会停止工作,因此可以肯定它依赖于这个证书。
到目前为止,所有的网络搜索都指向上述命令,并确保 CDP 可以从外部解析,但我已经解决了这些问题。
我赞赏并建议
答案1
我认为值得报告我的发现。
事实证明,Windows 正在撤销证书,但根据设计,CRL 会进行一些本地缓存。似乎即使证书显示为已撤销,缓存副本仍会使用,直到特定时间段过去,但是,据我了解,我在最初的帖子中运行的两个命令应该已经过期,并从服务器请求最新的证书,但事实似乎并非如此。
我引入了增量 CRL,这使得故障排除必须更快,现在一切似乎都很好,所以最终是误报。
谢谢你的建议 Greg
答案2
I'm using a simple test app on the client that is configured to use the one certificate so if revoked would simply stop working
。
您需要验证客户端是否正在通过 tcp/80 上的 CRL 数据包捕获来检查 CRL。这将需要五分钟。
如果你想验证这一点视窗CRL 检查正在工作,您可以在客户端使用以下命令:
certutil -f –urlfetch -verify ExportedCertificate.cer
您还需要启用 CAPI2 事件日志,任何 CRL 检查失败都将记录在那里。
但是应用程序使用和验证证书的方式不一定与 Windows 使用和验证证书的方式相同。