SslStream Konstruktory
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
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
Výjimky
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
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
- 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
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
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
- 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
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
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
- 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
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
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
- 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ý.
Poznámky
Použití šifry Null se vyžaduje, pokud encryptionPolicy
je parametr nastavený na EncryptionPolicy.NoEncryptionhodnotu .