Как вернуть для свойства ServerCertificateValidationCallback его поведение по умолчанию?

Я использую следующую строку кода в одном методе, чтобы явно проверить сертификат 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, специально предназначенного для этого метода. Я быстро протестировал возврат «Истина» из обратного вызова, чтобы все сертификаты считались доверенными, а не проверяли конкретное имя (например, MyTrustedCompany), а дополнительные запросы работали . Вот откуда я знаю, что это назначение обратного вызова достигает отца, чем этот единственный метод. Конечно, я мог бы расширить обратный вызов, включив в него все другие имена сертификатов, но я бы , скорее, сделал бы настройку ServerCertificateValidationCallback обратно на поведение по умолчанию. Как псевдокод ниже:

ServicePointManager.ServerCertificateValidationCallback = Nothing  'Default checking behavior

Как мне удалить пользовательскую проверку и вернуть ее поведение по умолчанию? Спасибо!

16
задан atconway 11 November 2010 в 22:15
поделиться