Каков наилучший способ обработки неподтвержденных сертификатов SSL в C # - PullRequest
4 голосов
/ 25 сентября 2008

Я использую следующий код, чтобы убедиться, что все сертификаты проходят, даже недействительные, но я хотел бы знать, есть ли лучший способ, так как это событие вызывается глобально, и я хочу, чтобы сертификат проходил только определенный 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;
};

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

Ответы [ 2 ]

1 голос
/ 25 сентября 2008

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

1 голос
/ 25 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...