我怀疑构建 CRL 缓存的过程可能会导致某些应用程序出现延迟。
我们有几个 .NET 应用程序偶尔会在没有 CPU 或磁盘访问的情况下“运行缓慢”。我怀疑他们在尝试验证证书时挂断了身份验证,因为超时将近 20 秒。
大多数应用程序不指定 CryptoAPI 使用累积超时。如果未启用累积超时选项,CryptoAPI 将使用 CryptoAPI 默认设置,即每个 URL 超时 15 秒。如果应用程序指定了累积超时选项,那么 CryptoAPI 将使用默认设置 20 秒作为累积超时。第一个 URL 的最大超时时间为 10 秒。随后的每个 URL 超时是累积超时值中剩余余额的一半。
由于这是一项服务,我如何检测和记录我有源代码的应用程序以及第 3 方的 CryptoAPI 挂起
获得更多信息的一种方法是启用 CAPI2 事件日志
事件日志中出现的信息将有助于确定证书验证过程在何处花费了很长时间。
启用日志记录
将日志保存到文件
禁用日志记录
清除日志
我为您提供了几种不同的选择,因为对潜在的 PKI 进行故障排除可能是一个复杂的问题。
CRL 是缓慢、笨重的野兽……
首先,我要告诉您,CRL 超时已导致世界上最大的 PKI 不使用 CRL 来满足绝大多数 PKI 验证需求。当用户在发送加密电子邮件之前只需要简单的是或否时,下载一个 50MB 的文件是不可能的!
如何进行验证
1 - 您可以使用第 3 方验证客户端(例如 Tumbleweed 或其他)测试替换 Microsoft 的本机验证客户端,然后监视第 3 方验证客户端(作为控件)。Tumbleweed/Axways 销售并提供流行的第 3 方验证客户端、OCSP 中继器和响应器的试用版。您还可以使用 OpenSSL、ejbca 或 OpenCA 作为验证响应程序。此外,还有一个 OSS 框架 PKIF,其中包括特定的 CAPI 日志记录功能,以及位于http://pkif.sourceforge.net/的 OCSP 客户端
2 - 您可以控制验证数据源(CRL、OCSP、SCVP)。
3 - 另一个问题来源可能是 DNS 解析速度慢、缺少 DNS 缓存或配置错误的 PKI、缺少信任或刷新 CRL 所需的时间(如果 PKI 较大会导致临时挂起)。
您能否分享有关应用程序配置、PKI 本身、x509 证书字段、带宽等的更多详细信息。我特别感兴趣的是与验证相关的字段,例如授权信息访问 (AIA) 字段例如,以及任何对 CRL 或 OCSP 的硬编码引用。
请记住,响应类型中也存在众所周知的歧义。专门针对 OCSP 的 RFC 存在问题,因为良好的响应和未知的响应对于验证不知道的证书同样有效。
替代方案的讨论:
有两种主要的证书验证方法,白名单和黑名单。
黑名单协议包括 CRL、OCSP 和 SCVP,然后是 OCSP 的变体。
Windows 上的白名单可以使用 OCSP 与 CA DB、CTLs* 和 SCVP 接口来执行。
在大多数情况下,白名单方法被认为是黑名单方法更高级、更安全、更快、更实时和更好的替代方法。
对于它的价值,有一个可能无法解决特定问题的修补程序,但包含一个更新的 cryptnet.dll 来解决 OCSP 问题。此特定文件也未在 SP1 中更新。
您不能使用基于证书的登录方法对运行 Windows Server 2008 R2 的计算机上的请求进行身份验证
http://support.microsoft.com/kb/2666300