Каков наилучший способ обработки неподтвержденных SSL-сертификатов на C#

StackOverflow https://stackoverflow.com/questions/129544

  •  02-07-2019
  •  | 
  •  

Вопрос

Я использую следующий код, чтобы убедиться, что все сертификаты проходят, даже недействительные, но я хотел бы знать, есть ли лучший способ, поскольку это событие вызывается глобально, и я хочу, чтобы сертификат передавался только для определенного HTTP-вызова, а не для любых других, которые происходят асинхронно.

// This delegate makes sure that non-validating SSL certificates are passed
ServicePointManager.ServerCertificateValidationCallback = delegate(object certsender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
   return true;
};

Приведенный выше код - это всего лишь пример игнорирования любой неподтвержденности сертификата.Проблема, с которой я сталкиваюсь, заключается в том, что это глобальный событие.Я не могу видеть, для какого сеанса происходит событие.Возможно, у меня проходит пара http-запросов, и я хочу попросить пользователя выполнить действие для каждого запроса.

Это было полезно?

Решение

А как насчет certsender спор?Содержит ли он что-нибудь разумное, чтобы вы могли определить, для какого соединения выполняется обратный вызов?Я проверил.NET API, но в нем не указано, что должен содержать аргумент...

Другие советы

Что ж, вы действительно могли бы потрудиться проверить некоторые из этих параметров.;) Например, если у вас есть самозаверяющий сертификат, то разрешайте только ошибка == sslPolicyErrors.RemoteCertificateChainError насквозь.Вы также можете проверить эмитента, название и т.д.на самом сертификате для дополнительной безопасности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top