我在单个方法中使用以下代码行来明确检查并信任来自以下主机的 SSL 证书:MyTrustedCompany.com:
ServicePointManager.ServerCertificateValidationCallback = Function(obj As [Object], certificate As X509Certificate, chain As X509Chain, errors As SslPolicyErrors) (certificate.Subject.Contains("CN=MyTrustedCompany.com"))
代码没问题 -> 100% 完美运行。
问题是,它影响太大了。我原以为它的范围只会在我为其贴标的方法内,但显然它是“ServicePointManager”对象上的一个共享属性,并且必须在整个应用程序中持续存在,这是我不想要的。
问题是后来我调用我的 Web 服务等并收到“无法建立信任关系...”异常。这是因为在上面的代码行中,我检查了特定于该方法的 SSL 证书的主机名。我快速测试了从回调中返回“True”,因此所有证书都将受到信任,而不是检查特定名称(即 MyTrustedCompany)和后续请求有效。这就是我知道这个回调分配比那个单一方法到达父亲的方式。当然,我可以扩展回调以包括所有其他证书名称,但我宁愿做的是将“ServerCertificateValidationCallback”设置回其默认行为。像下面的伪代码:
ServicePointManager.ServerCertificateValidationCallback = Nothing 'Default checking behavior
如何删除自定义验证并将其设置回默认行为?谢谢!
最佳答案
这实际上似乎有效(尽管很简单)并使对象以其默认方式运行。
ServicePointManager.ServerCertificateValidationCallback = Nothing
关于.net - 如何将 'ServerCertificateValidationCallback' 属性设置回其默认行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4156365/