使用 CSharp,如果我这样做:
System.Security.Cryptography.X509Certificates.X509Chain ch = new System.Security.Cryptography.X509Certificates.X509Chain();
效果如何:
ch.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(4000);
?
根据 https://msdn.microsoft.com/en-us/library/system.timespan(v=vs.110(.aspx
我将 TimeSpan 结构的新实例初始化为指定的刻度数,并且刻度等于 100 纳秒或千万分之一秒。一毫秒内有 10,000 个刻度。参考: https://msdn.microsoft.com/en-us/library/system.timespan.ticks(v=vs.110(.aspx
这看起来我正在将超时设置为小于一毫秒以下载证书吊销列表。然而,在实践中,使用这种代码下载非常大的 CRL 文件需要花费数秒。
那么这条线到底有什么作用呢?
蒂亚。
这看起来像我将超时设置为小于一毫秒以下载证书吊销列表
https://referencesource.microsoft.com/#System/security/system/security/cryptography/x509/x509chain.cs,383:
ChainPara.dwUrlRetrievalTimeout = (uint)Math.Floor(timeout.TotalMilliseconds);
因此,您有效地将其设置为"0",从而生成操作系统默认值。这只是一个问题,它必须如何舍入值才能将其发送到Windows。
该值映射到CERT_CHAIN_PARA上的dwUrlRetrievalTimeout
,这并没有太多关于如何使用它的内容(下载之间的间隔,消息泵期间的超时等(。 但是你可以尝试TimeSpan.FromMilliseconds(1)
(或其他一些小数字(,看看你看到了什么。 1ms 不太可能超过 TCP 和 HTTP 连接时间,因此它可能会产生在Offline
模式下计算链的效果。