SslStream Конструкторы

Определение

Инициализирует новый экземпляр класса SslStream.

Перегрузки

SslStream(Stream)

Инициализирует новый экземпляр класса SslStream с использованием указанного объекта Stream.

SslStream(Stream, Boolean)

Инициализирует новый экземпляр класса SslStream, используя заданный поток Stream и параметр, указывающий поведение потока при закрытии.

SslStream(Stream, Boolean, RemoteCertificateValidationCallback)

Инициализирует новый экземпляр класса SslStream, используя заданный поток Stream, параметр, указывающий поведение потока при закрытии, и делегат проверки сертификата.

SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)

Инициализирует новый экземпляр класса SslStream, используя заданный поток Stream, параметр, указывающий поведение потока при закрытии, делегат проверки сертификата и делегат выбора сертификата.

SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback, EncryptionPolicy)

Инициализирует новый экземпляр класса SslStream с использованием указанного объекта Stream.

Комментарии

Чтобы предотвратить SslStream закрытие потока, который вы предоставляете SslStream , используйте конструктор .

SslStream(Stream)

Исходный код:
SslStream.cs
Исходный код:
SslStream.cs
Исходный код:
SslStream.cs

Инициализирует новый экземпляр класса SslStream с использованием указанного объекта Stream.

public:
 SslStream(System::IO::Stream ^ innerStream);
public SslStream (System.IO.Stream innerStream);
new System.Net.Security.SslStream : System.IO.Stream -> System.Net.Security.SslStream
Public Sub New (innerStream As Stream)

Параметры

innerStream
Stream

Объект Stream, используемый потоком SslStream для отправки и получения данных.

Исключения

innerStream недоступно для чтения.

-или-

innerStream недоступно для записи.

innerStream имеет значение null.

-или-

innerStream равно Null.

Комментарии

Если значение не указано в файле конфигурации для encryptionpolicy, EncryptionPolicy по умолчанию используется EncryptionPolicy.RequireEncryption значение для созданного экземпляра SslStream .

Использование шифра Null требуется, если для политики шифрования задано значение EncryptionPolicy.NoEncryption.

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

SslStream(Stream, Boolean)

Исходный код:
SslStream.cs
Исходный код:
SslStream.cs
Исходный код:
SslStream.cs

Инициализирует новый экземпляр класса SslStream, используя заданный поток Stream и параметр, указывающий поведение потока при закрытии.

public:
 SslStream(System::IO::Stream ^ innerStream, bool leaveInnerStreamOpen);
public SslStream (System.IO.Stream innerStream, bool leaveInnerStreamOpen);
new System.Net.Security.SslStream : System.IO.Stream * bool -> System.Net.Security.SslStream
Public Sub New (innerStream As Stream, leaveInnerStreamOpen As Boolean)

Параметры

innerStream
Stream

Объект Stream, используемый потоком SslStream для отправки и получения данных.

leaveInnerStreamOpen
Boolean

Логическое значение, указывающее поведение при закрытии объекта Stream, который используется объектом SslStream для отправки и получения данных. Данный параметр указывает, оставлен ли открытым внутренний поток.

Исключения

innerStream недоступно для чтения.

-или-

innerStream недоступно для записи.

innerStream имеет значение null.

-или-

innerStream равно Null.

Примеры

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

static void ProcessClient( TcpClient^ client )
{
   
   // A client has connected. Create the 
   // SslStream using the client's network stream.
   SslStream^ sslStream = gcnew SslStream( client->GetStream(),false );
   
   // Authenticate the server but don't require the client to authenticate.
   try
   {
      sslStream->AuthenticateAsServer( serverCertificate, false, true );
      // false == no client cert required; true == check cert revocation.
      
      // Display the properties and settings for the authenticated stream.
      DisplaySecurityLevel( sslStream );
      DisplaySecurityServices( sslStream );
      DisplayCertificateInformation( sslStream );
      DisplayStreamProperties( sslStream );
      
      // Set timeouts for the read and write to 5 seconds.
      sslStream->ReadTimeout = 5000;
      sslStream->WriteTimeout = 5000;
      
      // Read a message from the client.   
      Console::WriteLine( L"Waiting for client message..." );
      String^ messageData = ReadMessage( sslStream );
      Console::WriteLine( L"Received: {0}", messageData );
      
      // Write a message to the client.
      array<Byte>^message = Encoding::UTF8->GetBytes( L"Hello from the server.<EOF>" );
      Console::WriteLine( L"Sending hello message." );
      sslStream->Write( message );
   }
   catch ( AuthenticationException^ e ) 
   {
      Console::WriteLine( L"Exception: {0}", e->Message );
      if ( e->InnerException != nullptr )
      {
         Console::WriteLine( L"Inner exception: {0}", e->InnerException->Message );
      }
      Console::WriteLine( L"Authentication failed - closing the connection." );
      sslStream->Close();
      client->Close();
      return;
   }
   finally
   {
      
      // The client stream will be closed with the sslStream
      // because we specified this behavior when creating
      // the sslStream.
      sslStream->Close();
      client->Close();
   }

}
static void ProcessClient (TcpClient client)
{
    // A client has connected. Create the
    // SslStream using the client's network stream.
    SslStream sslStream = new SslStream(
        client.GetStream(), false);
    // Authenticate the server but don't require the client to authenticate.
    try
    {
        sslStream.AuthenticateAsServer(serverCertificate, clientCertificateRequired: false, checkCertificateRevocation: true);

        // Display the properties and settings for the authenticated stream.
        DisplaySecurityLevel(sslStream);
        DisplaySecurityServices(sslStream);
        DisplayCertificateInformation(sslStream);
        DisplayStreamProperties(sslStream);

        // Set timeouts for the read and write to 5 seconds.
        sslStream.ReadTimeout = 5000;
        sslStream.WriteTimeout = 5000;
        // Read a message from the client.
        Console.WriteLine("Waiting for client message...");
        string messageData = ReadMessage(sslStream);
        Console.WriteLine("Received: {0}", messageData);

        // Write a message to the client.
        byte[] message = Encoding.UTF8.GetBytes("Hello from the server.<EOF>");
        Console.WriteLine("Sending hello message.");
        sslStream.Write(message);
    }
    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.");
        sslStream.Close();
        client.Close();
        return;
    }
    finally
    {
        // The client stream will be closed with the sslStream
        // because we specified this behavior when creating
        // the sslStream.
        sslStream.Close();
        client.Close();
    }
}
Private Shared Sub ProcessClient(client As TcpClient)
    ' A client has connected. Create the 
    ' SslStream using the client's network stream.
    Dim sslStream = New SslStream(client.GetStream(), False)

    Try

        sslStream.AuthenticateAsServer(serverCertificate, clientCertificateRequired:=False, checkCertificateRevocation:=True)
        ' Display the properties And settings for the authenticated stream.
        DisplaySecurityLevel(sslStream)
        DisplaySecurityServices(sslStream)
        DisplayCertificateInformation(sslStream)
        DisplayStreamProperties(sslStream)

        ' Set timeouts for the read and write to 5 seconds.
        sslStream.ReadTimeout = 5000
        sslStream.WriteTimeout = 5000

        ' Read a message from the client.   
        Console.WriteLine("Waiting for client message...")
        Dim messageData As String = ReadMessage(sslStream)
        Console.WriteLine("Received: {0}", messageData)

        ' Write a message to the client.
        Dim message As Byte() = Encoding.UTF8.GetBytes("Hello from the server.<EOF>")
        Console.WriteLine("Sending hello message.")
        sslStream.Write(message)
    Catch e As AuthenticationException
        Console.WriteLine("Exception: {0}", e.Message)

        If e.InnerException IsNot Nothing Then
            Console.WriteLine("Inner exception: {0}", e.InnerException.Message)
        End If

        Console.WriteLine("Authentication failed - closing the connection.")
        sslStream.Close()
        client.Close()
        Return
    Finally
        ' The client stream will be closed with the sslStream
        ' because we specified this behavior when creating
        ' the sslStream.
        sslStream.Close()
        client.Close()
    End Try
End Sub

Комментарии

При указании trueleaveStreamOpen параметра закрытие SslStream не оказывает влияния на innerStream поток; необходимо явно закрыть innerStream , когда он больше не нужен.

Если значение не указано в файле конфигурации для encryptionpolicy, EncryptionPolicy по умолчанию используется EncryptionPolicy.RequireEncryption значение для созданного экземпляра SslStream .

Использование шифра Null требуется, если для политики шифрования задано значение EncryptionPolicy.NoEncryption.

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

SslStream(Stream, Boolean, RemoteCertificateValidationCallback)

Исходный код:
SslStream.cs
Исходный код:
SslStream.cs
Исходный код:
SslStream.cs

Инициализирует новый экземпляр класса SslStream, используя заданный поток Stream, параметр, указывающий поведение потока при закрытии, и делегат проверки сертификата.

public:
 SslStream(System::IO::Stream ^ innerStream, bool leaveInnerStreamOpen, System::Net::Security::RemoteCertificateValidationCallback ^ userCertificateValidationCallback);
public SslStream (System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback? userCertificateValidationCallback);
public SslStream (System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback userCertificateValidationCallback);
new System.Net.Security.SslStream : System.IO.Stream * bool * System.Net.Security.RemoteCertificateValidationCallback -> System.Net.Security.SslStream
Public Sub New (innerStream As Stream, leaveInnerStreamOpen As Boolean, userCertificateValidationCallback As RemoteCertificateValidationCallback)

Параметры

innerStream
Stream

Объект Stream, используемый потоком SslStream для отправки и получения данных.

leaveInnerStreamOpen
Boolean

Логическое значение, указывающее поведение при закрытии объекта Stream, который используется объектом SslStream для отправки и получения данных. Данный параметр указывает, оставлен ли открытым внутренний поток.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Делегат RemoteCertificateValidationCallback, отвечающий за проверку сертификата, представленного удаленной стороной.

Исключения

innerStream недоступно для чтения.

-или-

innerStream недоступно для записи.

innerStream имеет значение null.

-или-

innerStream равно Null.

Примеры

В следующем примере кода создается SslStream и инициируется клиентская часть проверки подлинности.

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

    Console::WriteLine("Authentication failed - "
        "closing the connection.");
    sslStream->Close();
    client->Close();
    return;
}
// 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;
}
' Create a TCP/IP client socket.
' machineName is the host running the server application.
Dim client = New TcpClient(machineName, 5000)
Console.WriteLine("Client connected.")

' Create an SSL stream that will close the client's stream.
Dim sslStream = New SslStream(
    client.GetStream(), False, 
    New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate), Nothing)

' The server name must match the name on the server certificate.
Try
    sslStream.AuthenticateAsClient(serverName)
Catch e As AuthenticationException
    Console.WriteLine("Exception: {0}", e.Message)

    If e.InnerException IsNot Nothing Then
        Console.WriteLine("Inner exception: {0}", e.InnerException.Message)
    End If

    Console.WriteLine("Authentication failed - closing the connection.")
    client.Close()
    Return
End Try

Комментарии

При указании trueleaveStreamOpen параметра закрытие SslStream не оказывает влияния на innerStream поток; необходимо явно закрыть innerStream , когда он больше не нужен.

Аргумент userCertificateValidationCallback делегата certificateErrors содержит коды ошибок Windows, возвращаемые интерфейсом поставщика поддержки безопасности канала (SSPI). Возвращаемое значение метода, вызываемого делегатом userCertificateValidationCallback , определяет успешность проверки подлинности.

Протокол безопасности и алгоритмы шифрования уже выбраны при userCertificateValidationCallback вызове метода делегата. Вы можете использовать метод , чтобы определить, достаточно ли для вашего приложения выбранных криптографических алгоритмов и сильных сторон. В противном случае метод должен вернуться false , чтобы предотвратить SslStream создание .

Если значение не указано в файле конфигурации для encryptionpolicy, EncryptionPolicy по умолчанию используется EncryptionPolicy.RequireEncryption значение для созданного экземпляра SslStream .

Использование шифра Null требуется, если для политики шифрования задано значение EncryptionPolicy.NoEncryption.

Примечание

.NET кэширует сеансы SSL по мере их создания и пытается повторно использовать кэшированный сеанс для последующих запросов, если это возможно. При попытке повторного использования сеанса SSL платформа использует первый элемент , предоставленный X509Certificate2Collection во время проверки подлинности (если он есть), или пытается повторно использовать анонимные сеансы, если коллекция сертификатов пуста.

Примечание

Сертификаты клиента не поддерживаются в протоколе SSL версии 2.

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

SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)

Исходный код:
SslStream.cs
Исходный код:
SslStream.cs
Исходный код:
SslStream.cs

Инициализирует новый экземпляр класса SslStream, используя заданный поток Stream, параметр, указывающий поведение потока при закрытии, делегат проверки сертификата и делегат выбора сертификата.

public:
 SslStream(System::IO::Stream ^ innerStream, bool leaveInnerStreamOpen, System::Net::Security::RemoteCertificateValidationCallback ^ userCertificateValidationCallback, System::Net::Security::LocalCertificateSelectionCallback ^ userCertificateSelectionCallback);
public SslStream (System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback? userCertificateValidationCallback, System.Net.Security.LocalCertificateSelectionCallback? userCertificateSelectionCallback);
public SslStream (System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback userCertificateValidationCallback, System.Net.Security.LocalCertificateSelectionCallback userCertificateSelectionCallback);
new System.Net.Security.SslStream : System.IO.Stream * bool * System.Net.Security.RemoteCertificateValidationCallback * System.Net.Security.LocalCertificateSelectionCallback -> System.Net.Security.SslStream
Public Sub New (innerStream As Stream, leaveInnerStreamOpen As Boolean, userCertificateValidationCallback As RemoteCertificateValidationCallback, userCertificateSelectionCallback As LocalCertificateSelectionCallback)

Параметры

innerStream
Stream

Объект Stream, используемый потоком SslStream для отправки и получения данных.

leaveInnerStreamOpen
Boolean

Логическое значение, указывающее поведение при закрытии объекта Stream, который используется объектом SslStream для отправки и получения данных. Данный параметр указывает, оставлен ли открытым внутренний поток.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Делегат RemoteCertificateValidationCallback, отвечающий за проверку сертификата, представленного удаленной стороной.

userCertificateSelectionCallback
LocalCertificateSelectionCallback

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

Исключения

innerStream недоступно для чтения.

-или-

innerStream недоступно для записи.

innerStream имеет значение null.

-или-

innerStream равно Null.

Примеры

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

// Server name must match the host name and the name on the host's certificate. 
serverName = args[ 1 ];

// Create a TCP/IP client socket.
TcpClient^ client = gcnew TcpClient( serverName,5000 );
Console::WriteLine( L"Client connected." );

// Create an SSL stream that will close the client's stream.
SslStream^ sslStream = gcnew SslStream( 
    client->GetStream(),
    false,
    gcnew RemoteCertificateValidationCallback( ValidateServerCertificate ),
    gcnew LocalCertificateSelectionCallback( SelectLocalCertificate ) );
// Server name must match the host name and the name on the host's certificate.
serverName = args[0];
// Create a TCP/IP client socket.
TcpClient client = new TcpClient(serverName,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),
    new LocalCertificateSelectionCallback(SelectLocalCertificate)
    );
' Server name must match the host name and the name on the host's certificate. 
serverName = args(0)
' Create a TCP/IP client socket.
Dim client As New TcpClient(serverName, 5000)
Console.WriteLine("Client connected.")
' Create an SSL stream that will close the client's stream.
Dim sslStream As New SslStream(
    client.GetStream(), False, 
    New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate), 
    New LocalCertificateSelectionCallback(AddressOf SelectLocalCertificate))

Комментарии

При указании trueleaveStreamOpen параметра закрытие SslStream не оказывает влияния на innerStream поток; необходимо явно закрыть innerStream , когда он больше не нужен.

Аргумент userCertificateValidationCallback делегата certificateErrors содержит коды ошибок Windows, возвращаемые интерфейсом поставщика поддержки безопасности канала (SSPI). Возвращаемое значение метода, вызываемого делегатом userCertificateValidationCallback , определяет успешность проверки подлинности.

Протокол безопасности и алгоритмы шифрования уже выбраны при userCertificateValidationCallback вызове метода делегата. Вы можете использовать метод , чтобы определить, достаточно ли для вашего приложения выбранных криптографических алгоритмов и сильных сторон. В противном случае метод должен вернуться false , чтобы предотвратить SslStream создание .

Делегат userCertificateSelectionCallback полезен, если приложение имеет несколько сертификатов и должно динамически выбирать сертификат. Сертификаты в хранилище MY передаются в метод, вызываемый делегатом.

Если значение не указано в файле конфигурации для encryptionpolicy, EncryptionPolicy по умолчанию используется EncryptionPolicy.RequireEncryption значение для созданного экземпляра SslStream .

Использование шифра Null требуется, если для политики шифрования задано значение EncryptionPolicy.NoEncryption.

Примечание

.NET кэширует сеансы SSL по мере их создания и пытается повторно использовать кэшированный сеанс для последующих запросов, если это возможно. При попытке повторного использования сеанса SSL платформа использует первый элемент , предоставленный X509Certificate2Collection во время проверки подлинности (если он есть), или пытается повторно использовать анонимные сеансы, если коллекция сертификатов пуста.

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

SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback, EncryptionPolicy)

Исходный код:
SslStream.IO.cs
Исходный код:
SslStream.cs
Исходный код:
SslStream.cs

Инициализирует новый экземпляр класса SslStream с использованием указанного объекта Stream.

public:
 SslStream(System::IO::Stream ^ innerStream, bool leaveInnerStreamOpen, System::Net::Security::RemoteCertificateValidationCallback ^ userCertificateValidationCallback, System::Net::Security::LocalCertificateSelectionCallback ^ userCertificateSelectionCallback, System::Net::Security::EncryptionPolicy encryptionPolicy);
public SslStream (System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback? userCertificateValidationCallback, System.Net.Security.LocalCertificateSelectionCallback? userCertificateSelectionCallback, System.Net.Security.EncryptionPolicy encryptionPolicy);
public SslStream (System.IO.Stream innerStream, bool leaveInnerStreamOpen, System.Net.Security.RemoteCertificateValidationCallback userCertificateValidationCallback, System.Net.Security.LocalCertificateSelectionCallback userCertificateSelectionCallback, System.Net.Security.EncryptionPolicy encryptionPolicy);
new System.Net.Security.SslStream : System.IO.Stream * bool * System.Net.Security.RemoteCertificateValidationCallback * System.Net.Security.LocalCertificateSelectionCallback * System.Net.Security.EncryptionPolicy -> System.Net.Security.SslStream
Public Sub New (innerStream As Stream, leaveInnerStreamOpen As Boolean, userCertificateValidationCallback As RemoteCertificateValidationCallback, userCertificateSelectionCallback As LocalCertificateSelectionCallback, encryptionPolicy As EncryptionPolicy)

Параметры

innerStream
Stream

Объект Stream, используемый потоком SslStream для отправки и получения данных.

leaveInnerStreamOpen
Boolean

Логическое значение, указывающее поведение при закрытии объекта Stream, который используется объектом SslStream для отправки и получения данных. Данный параметр указывает, оставлен ли открытым внутренний поток.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Делегат RemoteCertificateValidationCallback, отвечающий за проверку сертификата, представленного удаленной стороной.

userCertificateSelectionCallback
LocalCertificateSelectionCallback

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

encryptionPolicy
EncryptionPolicy

Используемый EncryptionPolicy.

Исключения

innerStream недоступно для чтения.

-или-

innerStream недоступно для записи.

-или-

Недопустимый параметр encryptionPolicy.

innerStream имеет значение null.

-или-

innerStream равно Null.

Комментарии

Использование шифра Null является обязательным, если encryptionPolicy параметр имеет значение EncryptionPolicy.NoEncryption.

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