X509Chain ChainPolicy UrlRetrievalTimeout初始化有什么影响?

时间:2017-06-21 17:55:17

标签: c# x509certificate

使用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文件。

那条线究竟做了什么?

TIA。

1 个答案:

答案 0 :(得分:1)

  

这看起来我将超时设置为小于一毫秒来下载证书吊销列表

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模式下计算链的效果。