Прочитать на английском

Поделиться через


RemoteCertificateValidationCallback Делегат

Определение

Проверяет удаленный сертификат SSL, используемый для проверки подлинности.

C#
public delegate bool RemoteCertificateValidationCallback(object sender, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors);
C#
public delegate bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors);

Параметры

sender
Object

Объект, содержащий сведения о состоянии для данной проверки.

certificate
X509Certificate

Сертификат, используемый для проверки подлинности удаленной стороны.

chain
X509Chain

Цепочка центров сертификации, связанная с удаленным сертификатом.

sslPolicyErrors
SslPolicyErrors

Одна или более ошибок, связанных с удаленным сертификатом.

Возвращаемое значение

Значение типа Boolean, определяющее, принимается ли указанный сертификат для проверки подлинности.

Примеры

В следующем примере кода реализуется метод, вызываемый экземпляром RemoteCertificateValidationCallback класса . При наличии ошибок проверки этот метод отображает их и возвращает false, что предотвращает обмен данными с сервером без проверки подлинности.

C#

// The following method is invoked by the RemoteCertificateValidationDelegate.
public static bool ValidateServerCertificate(
      object sender,
      X509Certificate certificate,
      X509Chain chain,
      SslPolicyErrors sslPolicyErrors)
{
   if (sslPolicyErrors == SslPolicyErrors.None)
        return true;

    Console.WriteLine("Certificate error: {0}", sslPolicyErrors);

    // Do not allow this client to communicate with unauthenticated servers.
    return false;
}

В следующем примере кода делегат создается с помощью метода, определенного в предыдущем примере кода.

C#
// Create a TCP/IP client socket.
// machineName is the host running the server application.
TcpClient client = new TcpClient(machineName,5000);
Console.WriteLine("Client connected.");
// Create an SSL stream that will close the client's stream.
SslStream sslStream = new SslStream(
    client.GetStream(),
    false,
    new RemoteCertificateValidationCallback (ValidateServerCertificate),
    null
    );
// The server name must match the name on the server certificate.
try
{
    sslStream.AuthenticateAsClient(serverName);
}
catch (AuthenticationException e)
{
    Console.WriteLine("Exception: {0}", e.Message);
    if (e.InnerException != null)
    {
        Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
    }
    Console.WriteLine ("Authentication failed - closing the connection.");
    client.Close();
    return;
}

Комментарии

Аргумент делегата sslPolicyErrors содержит все ошибки сертификата, возвращаемые SSPI при проверке подлинности клиента или сервера. Значение Boolean , возвращаемое методом, вызываемым этим делегатом, определяет, разрешена ли проверка подлинности.

Этот делегат используется с классом SslStream .

Методы расширения

GetMethodInfo(Delegate)

Получает объект, представляющий метод, представленный указанным делегатом.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

См. также раздел