我连接的服务器最近更改了它的SSL证书。自更改以来,下载证书吊销列表时,SSL认证需要超过10秒才能完成。SslStream.AuthenticateAsClient()非缓存未缓存CRL
我使用RemoteCertificateChainCallback验证证书,但发生时间延迟之前调用回调,所以它不是证书链或任何其他行动建设存在是造成延迟
这个问题只发生在CRL没有被缓存时,也就是我需要删除CRL缓存(Documents & settings/[user] AppData/Microsoft/CertificateUrlCache 或类似的)在一天内重复使用一次以上。
如果我在AuthenticateAsClient()调用中禁用CRL检查,则认证很快。我可以看到当 CRL最终被请求,它几乎是瞬间下载,所以延迟不是一个网络延迟(至少不是CRL服务器)。
,我与网络嗅探器看到一个奇怪的是,从服务器的初始SSL证书检索后,有五周秒钟的延迟,直到CRL被下载。**
有没有人有任何建议,在这个阶段可能会发生什么,以及可能造成的延迟?
谢谢!
更新:好的,我已经使用反射器和内存分析器进行深入研究。 AuthenticateAsClient。它看起来像的大部分时间都花在构建证书链,即:
if (!CAPISafe.CertGetCertificateChain(hChainEngine, pCertContext, ref pTime, invalidHandle, ref cert_chain_para, dwFlags, IntPtr.Zero, ref ppChainContext))
如果我不要求CRL验证,那么这将返回几乎在瞬间,与CRL检查启用,约4秒。
我怀疑如果手动尝试在我的RemoteCertificateValidationCallback中构建链,我会看到相同的延迟。
如果CRL被缓存了,这并不是真正的问题,但是看起来这个缓存对Windows7客户来说不起作用。 为什么 ??那么我想这是下一个任务...
任何人都可以解释什么可能导致连锁建设需要这么久?