如何将"ServerCertificateValidationCallback"属性设置回其默认行为?

atc*_*way 16 .net vb.net ssl ssl-certificate

我在单个方法中使用以下代码行来显式检查并信任来自以下主机的SSL证书:MyTrustedCompany.com:

ServicePointManager.ServerCertificateValidationCallback = Function(obj As [Object], certificate As X509Certificate, chain As X509Chain, errors As SslPolicyErrors) (certificate.Subject.Contains("CN=MyTrustedCompany.com"))
Run Code Online (Sandbox Code Playgroud)

代码没问题 - > 100%完美运行.

问题是,它太遥远了.我认为它的范围只在我对其进行十分转换的方法中,但显然它是'ServicePointManager'对象上的Shared属性,然后必须持久保存整个应用程序,这是我不想要的.

问题是后来我打电话给我的网络服务,并得到"无法建立信任关系..."的例外.这是因为在上面的代码行中,我检查了该方法的SSL证书的主机名.我很快就从回调中测试了返回'True',因此所有证书都是可信任的,而不是检查一个specefic名称(即MyTrustedCompany)和subiquent请求是否有效.这就是我知道这个回调赋值到达父亲的方法.当然,我可以扩展回调以包括所有其他证书名称,但我宁愿做的是将'ServerCertificateValidationCallback'设置回其默认行为.像下面的伪代码:

ServicePointManager.ServerCertificateValidationCallback = Nothing  'Default checking behavior
Run Code Online (Sandbox Code Playgroud)

如何删除自定义验证并将其设置回其默认行为?谢谢!

atc*_*way 13

这实际上似乎有效(尽可能简单)并使对象以默认方式运行.

ServicePointManager.ServerCertificateValidationCallback = Nothing
Run Code Online (Sandbox Code Playgroud)

  • 你有没有想过是否有任何方法可以使这个线程安全吗?由于这是静态的,我认为,每个使用Web服务的线程都会在设置时调用您的委托. (9认同)