Использование RemoteCertificateValidationCallback - PullRequest
1 голос
/ 24 июня 2019

В .NET Core 2.1 вы можете установить обработчик RemoteCertificateValidationCallback для проверки сертификата TLS сервера. Подпись обратного вызова задокументирована , но неясно, как ее использовать. Существует перечисление SslPolicyErrors, которое предоставляет значения для некоторых потенциальных ошибок проверки, но не всех. Например, в чем будет ошибка, если срок действия сертификата истек? Кроме того, какие дополнительные проверки будет выполнять реализация по умолчанию, и будут ли они по-прежнему применяться при использовании моего обратного вызова?

Я хочу изменить подтверждение двумя способами:

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

  2. Если сертификат или ЦС самоподписан и обычно не принимается, я все равно хочу его принять, если хеш совпадает. В этом случае SslPolicyErrors, вероятно, имеет значение, отличное от None.

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

Как бы это было сделано в C #?

Это метод скелета:

private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return certificate.GetCertHashString(HashAlgorithmName.SHA256) == "12345...";
}

Я еще не уверен насчет алгоритма хеширования. SHA-1 по умолчанию, вероятно, больше не подходит и может даже не существовать. Мне придется играть больше, когда основы сделаны.

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