X509Chain ChainPolicy UrlRetrievalTimeout 初始化有什么作用?

What is the effect of X509Chain ChainPolicy UrlRetrievalTimeout initialization?

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

This looks like I am setting a timeout to less than a millisecond to download certificate revocation lists

https://referencesource.microsoft.com/#System/security/system/security/cryptography/x509/x509chain.cs,383:

ChainPara.dwUrlRetrievalTimeout = (uint)Math.Floor(timeout.TotalMilliseconds);

因此您有效地将其设置为“0”,从而得到 OS 默认值。这只是一个问题,它必须如何舍入该值才能将其发送到 Windows.

该值映射到 CERT_CHAIN_PARA 上的 dwUrlRetrievalTimeout,关于它的使用方式并没有太多可说的(下载之间的间隔、消息泵期间的超时等) .但是您可以尝试 TimeSpan.FromMilliseconds(1) (或其他一些小数字),看看您看到了什么。 1ms 不太可能超过您的 TCP 和 HTTP 连接时间,因此它可能会以 Offline 模式计算链。