对ServicePointManager ServerCertificateValidationCallback的困惑



我正在编写一个继承自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
}

哪个对象或进程调用该回调?

在.NET框架中,大致如下:

  • WebClient创建一个HttpWebRequest
  • HttpWebRequest调用ServicePointManager.FindServicePoint(uri)
  • 生成的ServicePoint实例创建连接,并将ServerCertificateValidationCallback注册为任何封闭TLS隧道上的握手后挂钩

这是一个过于简单化的说法,但这些都是关键的公众成员。

我是否正确理解chain.Build()将是一个不必要的冗余步骤?

除非您有特定需要作为自定义验证例程的一部分来检查证书链,否则这是多余的。

操作系统/平台已经完成了握手,并给出了结论,ServerCertificateValidationCallback只是作为用户放弃连接或根据实际协商内容继续进行web请求的最后机会。

相关内容

  • 没有找到相关文章

最新更新