Я использую следующую строку кода в одном методе, чтобы явно проверить и доверять 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%.
Проблема в том, что это слишком далеко.Я думал, что его область действия будет только в пределах метода, который я его декальцировал, но, очевидно, это свойство Shared объекта 'ServicePointManager', которое затем должно сохраняться для всего приложения, которое мне не нужно.
позже я звоню в мои веб-службы и т. д. и получаю исключение "Не удалось установить доверительные отношения ...".Это потому, что в строке кода выше я проверяю имя хоста SSL-сертификата, специально предназначенного для этого метода.Я быстро протестировал возвращение 'True' из обратного вызова, чтобы все сертификаты были доверенными, вместо того, чтобы проверять конкретное имя (т.е. MyTrustedCompany) и последующие запросы работали .Вот как я знаю, что это назначение обратного вызова достигает отца, чем этот единственный метод.Конечно, я мог бы расширить обратный вызов, включив в него все другие сертифицирующие имена, но я бы , а не , сделал бы, чтобы 'ServerCertificateValidationCallback' вернулся к его поведению по умолчанию.Как и в приведенном ниже псевдокоде:
ServicePointManager.ServerCertificateValidationCallback = Nothing 'Default checking behavior
Как удалить пользовательскую проверку и вернуть ее к поведению по умолчанию?Спасибо!