SslStream Costruttori
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Inizializza una nuova istanza della classe SslStream.
Overload
SslStream(Stream) |
Inizializza una nuova istanza della classe SslStream usando il Stream specificato. |
SslStream(Stream, Boolean) |
Inizializza una nuova istanza della classe SslStream tramite l'oggetto Stream specificato e il comportamento di chiusura del flusso. |
SslStream(Stream, Boolean, RemoteCertificateValidationCallback) |
Inizializza una nuova istanza della classe SslStream tramite l'oggetto Stream specificato, il comportamento di chiusura del flusso e il delegato di convalida del certificato. |
SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback) |
Inizializza una nuova istanza della classe SslStream tramite l'oggetto Stream specificato, il comportamento di chiusura del flusso, il delegato di convalida del certificato e il delegato di selezione del certificato. |
SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback, EncryptionPolicy) |
Inizializza una nuova istanza della classe SslStream usando il Stream specificato. |
Commenti
Per impedire alla classe di SslStream chiudere il flusso fornito, usare il SslStream costruttore .
SslStream(Stream)
- Origine:
- SslStream.cs
- Origine:
- SslStream.cs
- Origine:
- 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)
Parametri
Eccezioni
Commenti
Se un valore non viene specificato nel file di configurazione per encryptionpolicy, il EncryptionPolicy valore predefinito EncryptionPolicy.RequireEncryption è impostato per l'istanza SslStream costruita.
L'uso della crittografia Null è necessario quando il criterio di crittografia è impostato su EncryptionPolicy.NoEncryption.
Si applica a
SslStream(Stream, Boolean)
- Origine:
- SslStream.cs
- Origine:
- SslStream.cs
- Origine:
- 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)
Parametri
- leaveInnerStreamOpen
- Boolean
Valore booleano indicante il comportamento di chiusura dell'oggetto Stream utilizzato dalla classe SslStream per inviare e ricevere dati. Questo parametro indica se il flusso interno viene lasciato aperto.
Eccezioni
Esempio
Nell'esempio di codice seguente viene illustrata la chiamata a questo costruttore.
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
Commenti
Quando si specifica true
per il parametro, la chiusura SslStream dell'oggetto leaveStreamOpen
non ha alcun effetto sul innerStream
flusso. È necessario chiudere innerStream
in modo esplicito quando non è più necessario.
Se un valore non viene specificato nel file di configurazione per encryptionpolicy, il EncryptionPolicy valore predefinito EncryptionPolicy.RequireEncryption è impostato per l'istanza SslStream costruita.
L'uso della crittografia Null è necessario quando il criterio di crittografia è impostato su EncryptionPolicy.NoEncryption.
Si applica a
SslStream(Stream, Boolean, RemoteCertificateValidationCallback)
- Origine:
- SslStream.cs
- Origine:
- SslStream.cs
- Origine:
- 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)
Parametri
- leaveInnerStreamOpen
- Boolean
Valore booleano indicante il comportamento di chiusura dell'oggetto Stream utilizzato dalla classe SslStream per inviare e ricevere dati. Questo parametro indica se il flusso interno viene lasciato aperto.
- userCertificateValidationCallback
- RemoteCertificateValidationCallback
Delegato RemoteCertificateValidationCallback responsabile della convalida del certificato emesso dalla parte remota.
Eccezioni
Esempio
Nell'esempio di codice seguente viene creato un oggetto SslStream e viene avviata la parte client dell'autenticazione.
// 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
Commenti
Quando si specifica true
per il parametro, la chiusura SslStream dell'oggetto leaveStreamOpen
non ha alcun effetto sul innerStream
flusso. È necessario chiudere innerStream
in modo esplicito quando non è più necessario.
L'argomento userCertificateValidationCallback
del delegato contiene i codici di errore di Windows restituiti dall'interfaccia del provider di certificateErrors
supporto della sicurezza del canale . Il valore restituito del metodo richiamato dal userCertificateValidationCallback
delegato determina se l'autenticazione ha esito positivo.
I protocolli di sicurezza e gli algoritmi crittografici sono già selezionati quando viene richiamato il userCertificateValidationCallback
metodo del delegato. È possibile usare il metodo per determinare se gli algoritmi e i punti di forza crittografici selezionati sono sufficienti per l'applicazione. In caso contrario, il metodo deve restituire false
per impedire la creazione dell'oggetto SslStream .
Se un valore non viene specificato nel file di configurazione per encryptionpolicy, il EncryptionPolicy valore predefinito EncryptionPolicy.RequireEncryption è impostato per l'istanza SslStream costruita.
L'uso della crittografia Null è necessario quando il criterio di crittografia è impostato su EncryptionPolicy.NoEncryption.
Nota
.NET memorizza nella cache le sessioni SSL durante la creazione e tenta di riutilizzare una sessione memorizzata nella cache per le richieste successive, se possibile. Quando si tenta di riutilizzare una sessione SSL, Framework usa il primo elemento dell'oggetto X509Certificate2Collection fornito durante l'autenticazione (se presente) o tenta di riutilizzare una sessione anonima se la raccolta di certificati è vuota.
Nota
I certificati client non sono supportati nel protocollo SSL versione 2.
Si applica a
SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)
- Origine:
- SslStream.cs
- Origine:
- SslStream.cs
- Origine:
- 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)
Parametri
- leaveInnerStreamOpen
- Boolean
Valore booleano indicante il comportamento di chiusura dell'oggetto Stream utilizzato dalla classe SslStream per inviare e ricevere dati. Questo parametro indica se il flusso interno viene lasciato aperto.
- userCertificateValidationCallback
- RemoteCertificateValidationCallback
Delegato RemoteCertificateValidationCallback responsabile della convalida del certificato emesso dalla parte remota.
- userCertificateSelectionCallback
- LocalCertificateSelectionCallback
Delegato LocalCertificateSelectionCallback responsabile della selezione del certificato utilizzato per l'autenticazione.
Eccezioni
Esempio
Nell'esempio di codice seguente viene illustrata la chiamata a questo costruttore. Questo esempio fa parte di un esempio più grande fornito per la SslStream classe.
// 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))
Commenti
Quando si specifica true
per il parametro, la chiusura SslStream dell'oggetto leaveStreamOpen
non ha alcun effetto sul innerStream
flusso. È necessario chiudere innerStream
in modo esplicito quando non è più necessario.
L'argomento userCertificateValidationCallback
del delegato contiene i codici di errore di Windows restituiti dall'interfaccia del provider di certificateErrors
supporto della sicurezza del canale . Il valore restituito del metodo richiamato dal userCertificateValidationCallback
delegato determina se l'autenticazione ha esito positivo.
I protocolli di sicurezza e gli algoritmi crittografici sono già selezionati quando viene richiamato il userCertificateValidationCallback
metodo del delegato. È possibile usare il metodo per determinare se gli algoritmi e i punti di forza crittografici selezionati sono sufficienti per l'applicazione. In caso contrario, il metodo deve restituire false
per impedire la creazione dell'oggetto SslStream .
Il userCertificateSelectionCallback
delegato è utile quando l'applicazione dispone di più certificati e deve scegliere dinamicamente un certificato. I certificati nell'archivio "MY" vengono passati al metodo richiamato dal delegato.
Se un valore non viene specificato nel file di configurazione per encryptionpolicy, il EncryptionPolicy valore predefinito EncryptionPolicy.RequireEncryption è impostato per l'istanza SslStream costruita.
L'uso della crittografia Null è necessario quando il criterio di crittografia è impostato su EncryptionPolicy.NoEncryption.
Nota
.NET memorizza nella cache le sessioni SSL durante la creazione e tenta di riutilizzare una sessione memorizzata nella cache per le richieste successive, se possibile. Quando si tenta di riutilizzare una sessione SSL, Framework usa il primo elemento dell'oggetto X509Certificate2Collection fornito durante l'autenticazione (se presente) o tenta di riutilizzare una sessione anonima se la raccolta di certificati è vuota.
Si applica a
SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback, EncryptionPolicy)
- Origine:
- SslStream.IO.cs
- Origine:
- SslStream.cs
- Origine:
- 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)
Parametri
- leaveInnerStreamOpen
- Boolean
Valore booleano indicante il comportamento di chiusura dell'oggetto Stream utilizzato dalla classe SslStream per inviare e ricevere dati. Questo parametro indica se il flusso interno viene lasciato aperto.
- userCertificateValidationCallback
- RemoteCertificateValidationCallback
Delegato RemoteCertificateValidationCallback responsabile della convalida del certificato emesso dalla parte remota.
- userCertificateSelectionCallback
- LocalCertificateSelectionCallback
Delegato LocalCertificateSelectionCallback responsabile della selezione del certificato utilizzato per l'autenticazione.
- encryptionPolicy
- EncryptionPolicy
Oggetto EncryptionPolicy da usare.
Eccezioni
innerStream
non è leggibile.
-oppure-
innerStream
non è scrivibile.
-oppure-
encryptionPolicy
non è valido.
Commenti
L'uso della crittografia Null è obbligatorio quando il encryptionPolicy
parametro è impostato su EncryptionPolicy.NoEncryption.