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