Как отключить удаленную проверку сертификатов с помощью потоков SSL .NET

#c# #asp.net #.net #asp.net-core #.net-core

Вопрос:

В классе .NET SslStream при вызове метода «AuthenticateAsClient» обязательно необходимо передать «адресную базу», на основе которой выполняется проверка удаленных сертификатов.

Если для targetHost установлено значение»*», то проверка удаленных сертификатов не выполняется, как указано в ссылке msdn

Теперь есть способ, которым мы устанавливаем «targethost’у» на допустимое значение и все еще хотим отключить проверку удаленного сертификата.

Комментарии:

1. Со стороны сервера в документации по классу приведен пример кода. Проверьте класс SslStream

2. Спасибо. Но это на стороне клиента, поэтому я использовал AuthenticateAsClient

3. AuthenticateAsClient Имеет перегрузку AuthenticateAsClient(SslClientAuthenticationOptions) . Просматривая документацию RemoteCertificateValidationCallback SslClientAuthenticationOptions, вы можете использовать ее для игнорирования удаленных неправильных/недействительных сертификатов.

4. @Cleptus Спасибо тебе

5. @Cleptus Спасибо за ваш совет, сэр, и не могли бы вы, пожалуйста, опубликовать его в качестве ответа, чтобы закончить этот билет?

Ответ №1:

Вам необходимо использовать обратный вызов проверки сертификата, чтобы вы могли решить, когда принимать или игнорировать удаленный сертификат, в том случае, если вы хотите игнорировать удаленный сертификат и принимать его независимо от ошибок.

С SSLStream помощью этого есть два способа достичь этого:

  1. Используйте перегрузку конструктора RemoteCertificateValidationCallback с аргументом. У вас есть пример кода в официальной документации RemoteCertificateValidationCallback
  2. Используйте перегрузку AuthenticateAsClient(SslClientAuthenticationOptions), у которой есть SslClientAuthenticationOptions аргумент со RemoteCertificateValidationCallback свойством, которое можно использовать для игнорирования удаленных неправильных/недействительных сертификатов.

Код пользовательской функции обратного вызова будет похож на этот:

 public static bool ValidateServerCertificate(
      object sender,
      X509Certificate certificate,
      X509Chain chain,
      SslPolicyErrors sslPolicyErrors)
{
   // We want to ignore remote certificate errors
   // Warning: In a normal scenario we would check the sslPolicyErrors argument instead.
   return true;
}