Sdílet prostřednictvím


SslStream Konstruktory

Definice

Inicializuje novou instanci SslStream třídy .

Přetížení

SslStream(Stream)

Inicializuje novou instanci SslStream třídy pomocí zadané Stream.

SslStream(Stream, Boolean)

Inicializuje novou instanci SslStream třídy pomocí zadaného Stream chování a uzavření datového proudu.

SslStream(Stream, Boolean, RemoteCertificateValidationCallback)

Inicializuje novou instanci SslStream třídy pomocí zadaného Streamchování uzavření datového proudu a ověření certifikátu delegáta.

SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)

Inicializuje novou instanci SslStream třídy pomocí zadaného Streamchování uzavření datového proudu, ověření certifikátu delegáta a delegáta pro výběr certifikátu.

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

Inicializuje novou instanci SslStream třídy pomocí zadané Stream.

Poznámky

Chcete-li zabránit SslStream v zavření datového proudu, který zadáte, použijte SslStream konstruktor.

SslStream(Stream)

Zdroj:
SslStream.cs
Zdroj:
SslStream.cs
Zdroj:
SslStream.cs

Inicializuje novou instanci SslStream třídy pomocí zadané 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)

Parametry

innerStream
Stream

Objekt Stream používaný objektem SslStream pro odesílání a příjem dat.

Výjimky

innerStream není čitelný.

-nebo-

innerStream není možné zapisovat.

innerStream je null.

-nebo-

innerStream se rovná hodnotě Null.

Poznámky

Pokud hodnota není zadána v konfiguračním souboru pro šifrovánízásady, EncryptionPolicy výchozí hodnota pro EncryptionPolicy.RequireEncryptionSslStream instanci, která je vytvořena.

Použití šifry Null se vyžaduje, pokud je zásada šifrování nastavená na EncryptionPolicy.NoEncryptionhodnotu .

Platí pro

SslStream(Stream, Boolean)

Zdroj:
SslStream.cs
Zdroj:
SslStream.cs
Zdroj:
SslStream.cs

Inicializuje novou instanci SslStream třídy pomocí zadaného Stream chování a uzavření datového proudu.

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)

Parametry

innerStream
Stream

Objekt Stream používaný objektem SslStream pro odesílání a příjem dat.

leaveInnerStreamOpen
Boolean

Logická hodnota, která označuje chování uzavření objektu Stream používaného SslStream pro odesílání a příjem dat. Tento parametr označuje, jestli je vnitřní datový proud ponechán otevřený.

Výjimky

innerStream není čitelný.

-nebo-

innerStream není možné zapisovat.

innerStream je null.

-nebo-

innerStream se rovná hodnotě Null.

Příklady

Následující příklad kódu ukazuje volání tohoto konstruktoru.

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

Poznámky

Při zadání parametru leaveStreamOpen nemá zavření parametru SslStreaminnerStream žádný vliv na datový proud. Pokud už ho nepotřebujete, musíte ho explicitně zavřítinnerStream.true

Pokud hodnota není zadána v konfiguračním souboru pro šifrovánízásady, EncryptionPolicy výchozí hodnota pro EncryptionPolicy.RequireEncryptionSslStream instanci, která je vytvořena.

Použití šifry Null se vyžaduje, pokud je zásada šifrování nastavená na EncryptionPolicy.NoEncryptionhodnotu .

Platí pro

SslStream(Stream, Boolean, RemoteCertificateValidationCallback)

Zdroj:
SslStream.cs
Zdroj:
SslStream.cs
Zdroj:
SslStream.cs

Inicializuje novou instanci SslStream třídy pomocí zadaného Streamchování uzavření datového proudu a ověření certifikátu delegáta.

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)

Parametry

innerStream
Stream

Objekt Stream používaný objektem SslStream pro odesílání a příjem dat.

leaveInnerStreamOpen
Boolean

Logická hodnota, která označuje chování uzavření objektu Stream používaného SslStream pro odesílání a příjem dat. Tento parametr označuje, jestli je vnitřní datový proud ponechán otevřený.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Delegát RemoteCertificateValidationCallback zodpovědný za ověření certifikátu dodaného vzdálenou stranou.

Výjimky

innerStream není čitelný.

-nebo-

innerStream není možné zapisovat.

innerStream je null.

-nebo-

innerStream se rovná hodnotě Null.

Příklady

Následující příklad kódu vytvoří SslStream a inicializuje klientskou část ověřování.

// 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

Poznámky

Při zadání parametru leaveStreamOpen nemá zavření parametru SslStreaminnerStream žádný vliv na datový proud. Pokud už ho nepotřebujete, musíte ho explicitně zavřítinnerStream.true

Argument userCertificateValidationCallback delegáta certificateErrors obsahuje všechny kódy chyb Windows vrácené kanálem SSPI (Security Support Provider Interface). Návratová hodnota metody vyvolané delegátem userCertificateValidationCallback určuje, jestli je ověření úspěšné.

Protokol zabezpečení a kryptografické algoritmy jsou již vybrány při userCertificateValidationCallback vyvolání metody delegáta. Pomocí metody můžete určit, jestli jsou vybrané kryptografické algoritmy a síly pro vaši aplikaci dostatečné. Pokud ne, metoda by se měla vrátit false , aby se zabránilo vytvoření objektu SslStream .

Pokud hodnota není zadána v konfiguračním souboru pro šifrovánízásady, EncryptionPolicy výchozí hodnota pro EncryptionPolicy.RequireEncryptionSslStream instanci, která je vytvořena.

Použití šifry Null se vyžaduje, pokud je zásada šifrování nastavená na EncryptionPolicy.NoEncryptionhodnotu .

Poznámka

.NET ukládá vytvořené relace SSL do mezipaměti a pokud je to možné, pokusí se znovu použít relaci uloženou v mezipaměti pro následné požadavky. Při pokusu o opakované použití relace SSL framework použije první prvek X509Certificate2Collection poskytnutého během ověřování (pokud existuje) nebo se pokusí znovu použít anonymní relace, pokud je kolekce certifikátů prázdná.

Poznámka

Protokol SSL verze 2 nepodporuje klientské certifikáty.

Platí pro

SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)

Zdroj:
SslStream.cs
Zdroj:
SslStream.cs
Zdroj:
SslStream.cs

Inicializuje novou instanci SslStream třídy pomocí zadaného Streamchování uzavření datového proudu, ověření certifikátu delegáta a delegáta pro výběr certifikátu.

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)

Parametry

innerStream
Stream

Objekt Stream používaný objektem SslStream pro odesílání a příjem dat.

leaveInnerStreamOpen
Boolean

Logická hodnota, která označuje chování uzavření objektu Stream používaného SslStream pro odesílání a příjem dat. Tento parametr označuje, jestli je vnitřní datový proud ponechán otevřený.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Delegát RemoteCertificateValidationCallback zodpovědný za ověření certifikátu dodaného vzdálenou stranou.

userCertificateSelectionCallback
LocalCertificateSelectionCallback

Delegát LocalCertificateSelectionCallback zodpovědný za výběr certifikátu použitého k ověřování.

Výjimky

innerStream není čitelný.

-nebo-

innerStream není možné zapisovat.

innerStream je null.

-nebo-

innerStream se rovná hodnotě Null.

Příklady

Následující příklad kódu ukazuje volání tohoto konstruktoru. Tento příklad je součástí většího příkladu poskytnutého SslStream pro třídu .

// 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))

Poznámky

Při zadání parametru leaveStreamOpen nemá zavření parametru SslStreaminnerStream žádný vliv na datový proud. Pokud už ho nepotřebujete, musíte ho explicitně zavřítinnerStream.true

Argument userCertificateValidationCallback delegáta certificateErrors obsahuje všechny kódy chyb Windows vrácené kanálem SSPI (Security Support Provider Interface). Návratová hodnota metody vyvolané delegátem userCertificateValidationCallback určuje, jestli je ověření úspěšné.

Protokol zabezpečení a kryptografické algoritmy jsou již vybrány při userCertificateValidationCallback vyvolání metody delegáta. Pomocí metody můžete určit, jestli jsou vybrané kryptografické algoritmy a síly pro vaši aplikaci dostatečné. Pokud ne, metoda by se měla vrátit false , aby se zabránilo vytvoření objektu SslStream .

Delegát userCertificateSelectionCallback je užitečný, když má vaše aplikace více certifikátů a musí dynamicky zvolit certifikát. Certifikáty v úložišti MY se předávají metodě vyvolané delegátem.

Pokud hodnota není zadána v konfiguračním souboru pro šifrovánízásady, EncryptionPolicy výchozí hodnota pro EncryptionPolicy.RequireEncryptionSslStream instanci, která je vytvořena.

Použití šifry Null se vyžaduje, pokud je zásada šifrování nastavená na EncryptionPolicy.NoEncryptionhodnotu .

Poznámka

.NET ukládá vytvořené relace SSL do mezipaměti a pokud je to možné, pokusí se znovu použít relaci uloženou v mezipaměti pro následné požadavky. Při pokusu o opakované použití relace SSL framework použije první prvek X509Certificate2Collection poskytnutého během ověřování (pokud existuje) nebo se pokusí znovu použít anonymní relace, pokud je kolekce certifikátů prázdná.

Platí pro

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

Zdroj:
SslStream.IO.cs
Zdroj:
SslStream.cs
Zdroj:
SslStream.cs

Inicializuje novou instanci SslStream třídy pomocí zadané 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)

Parametry

innerStream
Stream

Objekt Stream používaný objektem SslStream pro odesílání a příjem dat.

leaveInnerStreamOpen
Boolean

Logická hodnota, která označuje chování uzavření objektu Stream používaného SslStream pro odesílání a příjem dat. Tento parametr označuje, jestli je vnitřní datový proud ponechán otevřený.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Delegát RemoteCertificateValidationCallback zodpovědný za ověření certifikátu dodaného vzdálenou stranou.

userCertificateSelectionCallback
LocalCertificateSelectionCallback

Delegát LocalCertificateSelectionCallback zodpovědný za výběr certifikátu použitého k ověřování.

encryptionPolicy
EncryptionPolicy

Hodnota, EncryptionPolicy která se má použít.

Výjimky

innerStream není čitelný.

-nebo-

innerStream není možné zapisovat.

-nebo-

encryptionPolicy není platný.

innerStream je null.

-nebo-

innerStream se rovná hodnotě Null.

Poznámky

Použití šifry Null se vyžaduje, pokud encryptionPolicy je parametr nastavený na EncryptionPolicy.NoEncryptionhodnotu .

Platí pro