我正在编写一个继承自System.Net.WebClient的类。
ServiceCertificateValidationCallback正在触发,(errors == SslPolicyErrors.None)返回true。
System.Net.ServicePointManager.ServerCertificateValidationCallback =
delegate (Object obj, X509Certificate certificate, X509Chain chain,
System.Net.Security.SslPolicyErrors errors)
{
isTrusted = (errors == SslPolicyErrors.None);
};哪个对象或进程调用该回调?而且由于它是被调用的,我是否正确地理解chain.Build()将是一个不必要的多余步骤?
X509Certificate2 rootCert = (X509Certificate2)certificate;
X509Certificate2 clientCert =store.Certificates.Find(X509FindType.FindByThumbprint,
rootCert.thumbprint, false)[0]
chain.ChainPolicy.ExtraStore.Add((X509Certificate2) certificate);
if (chain.Build(clientCert))
{
// trusted chain
}发布于 2020-08-26 19:09:52
哪个对象或进程调用该回调?
在.NET框架中,大致是这样的:
WebClient创建一个HttpWebRequestHttpWebRequest调用ServicePointManager.FindServicePoint(uri)ServicePoint实例,创建连接,并将ServerCertificateValidationCallback注册为任何封闭的TLS隧道.上的握手后挂钩。
这是一个严重的过度简化,但这些都是关键的公众成员参与。
--我是否正确地理解
chain.Build()将是一个不必要的多余步骤?
除非您有特定的需要检查证书链作为自定义验证例程的一部分,是的,这将是多余的。
OS/platform已经完成了握手,并给出了它的结论,ServerCertificateValidationCallback只是用户放弃连接或根据实际协商进行web请求的最后一次机会。
https://stackoverflow.com/questions/63603326
复制相似问题