首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于ServicePointManager ServerCertificateValidationCallback的困惑

关于ServicePointManager ServerCertificateValidationCallback的困惑
EN

Stack Overflow用户
提问于 2020-08-26 18:03:00
回答 1查看 214关注 0票数 0

我正在编写一个继承自System.Net.WebClient的类。

ServiceCertificateValidationCallback正在触发,(errors == SslPolicyErrors.None)返回true

代码语言:javascript
复制
System.Net.ServicePointManager.ServerCertificateValidationCallback =
               delegate (Object obj, X509Certificate certificate, X509Chain chain,
               System.Net.Security.SslPolicyErrors errors)
               {
                  isTrusted = (errors == SslPolicyErrors.None);
               };

哪个对象或进程调用该回调?而且由于它是被调用的,我是否正确地理解chain.Build()将是一个不必要的多余步骤?

代码语言:javascript
复制
        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
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-26 19:09:52

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

在.NET框架中,大致是这样的:

  • WebClient创建一个HttpWebRequest
  • HttpWebRequest调用ServicePointManager.FindServicePoint(uri)
  • Resulting ServicePoint实例,创建连接,并将ServerCertificateValidationCallback注册为任何封闭的TLS隧道.

上的握手后挂钩。

这是一个严重的过度简化,但这些都是关键的公众成员参与。

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

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

OS/platform已经完成了握手,并给出了它的结论,ServerCertificateValidationCallback只是用户放弃连接或根据实际协商进行web请求的最后一次机会。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63603326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档