Bagikan melalui


SslStream Konstruktor

Definisi

Menginisialisasi instans baru kelas SslStream.

Overload

SslStream(Stream)

Menginisialisasi instans SslStream baru kelas menggunakan yang ditentukan Stream.

SslStream(Stream, Boolean)

Menginisialisasi instans SslStream baru kelas menggunakan perilaku penutupan yang ditentukan Stream dan streaming.

SslStream(Stream, Boolean, RemoteCertificateValidationCallback)

Menginisialisasi instans SslStream baru kelas menggunakan , perilaku penutupan aliran yang ditentukan Streamdan delegasi validasi sertifikat.

SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)

Menginisialisasi instans SslStream baru kelas menggunakan , perilaku penutupan aliran yang ditentukan Stream, delegasi validasi sertifikat, dan delegasi pemilihan sertifikat.

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

Menginisialisasi instans SslStream baru kelas menggunakan yang ditentukan Stream.

Keterangan

Untuk mencegah SslStream menutup aliran yang Anda berikan, gunakan SslStream konstruktor .

SslStream(Stream)

Sumber:
SslStream.cs
Sumber:
SslStream.cs
Sumber:
SslStream.cs

Menginisialisasi instans SslStream baru kelas menggunakan yang ditentukan 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)

Parameter

innerStream
Stream

Objek Stream yang SslStream digunakan oleh untuk mengirim dan menerima data.

Pengecualian

innerStream tidak dapat dibaca.

-atau-

innerStream tidak dapat ditulis.

innerStreamadalah null.

-atau-

innerStream sama dengan Null.

Keterangan

Jika nilai tidak ditentukan dalam file konfigurasi untuk encryptionpolicy, EncryptionPolicy defaultnya adalah EncryptionPolicy.RequireEncryption untuk SslStream instans yang dibangun.

Penggunaan cipher Null diperlukan ketika kebijakan enkripsi diatur ke EncryptionPolicy.NoEncryption.

Berlaku untuk

SslStream(Stream, Boolean)

Sumber:
SslStream.cs
Sumber:
SslStream.cs
Sumber:
SslStream.cs

Menginisialisasi instans SslStream baru kelas menggunakan perilaku penutupan yang ditentukan Stream dan streaming.

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)

Parameter

innerStream
Stream

Objek Stream yang SslStream digunakan oleh untuk mengirim dan menerima data.

leaveInnerStreamOpen
Boolean

Nilai Boolean yang menunjukkan perilaku penutupan objek yang StreamSslStream digunakan oleh untuk mengirim dan menerima data. Parameter ini menunjukkan apakah aliran dalam dibiarkan terbuka.

Pengecualian

innerStream tidak dapat dibaca.

-atau-

innerStream tidak dapat ditulis.

innerStreamadalah null.

-atau-

innerStream sama dengan Null.

Contoh

Contoh kode berikut menunjukkan pemanggilan konstruktor ini.

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

Keterangan

Ketika Anda menentukan true untuk leaveStreamOpen parameter , menutup SslStream tidak berpengaruh pada innerStream aliran; Anda harus secara eksplisit menutup innerStream ketika Anda tidak lagi membutuhkannya.

Jika nilai tidak ditentukan dalam file konfigurasi untuk encryptionpolicy, EncryptionPolicy defaultnya adalah EncryptionPolicy.RequireEncryption untuk SslStream instans yang dibangun.

Penggunaan cipher Null diperlukan ketika kebijakan enkripsi diatur ke EncryptionPolicy.NoEncryption.

Berlaku untuk

SslStream(Stream, Boolean, RemoteCertificateValidationCallback)

Sumber:
SslStream.cs
Sumber:
SslStream.cs
Sumber:
SslStream.cs

Menginisialisasi instans SslStream baru kelas menggunakan , perilaku penutupan aliran yang ditentukan Streamdan delegasi validasi sertifikat.

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)

Parameter

innerStream
Stream

Objek Stream yang SslStream digunakan oleh untuk mengirim dan menerima data.

leaveInnerStreamOpen
Boolean

Nilai Boolean yang menunjukkan perilaku penutupan objek yang StreamSslStream digunakan oleh untuk mengirim dan menerima data. Parameter ini menunjukkan apakah aliran dalam dibiarkan terbuka.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Delegasi yang RemoteCertificateValidationCallback bertanggung jawab untuk memvalidasi sertifikat yang disediakan oleh pihak jarak jauh.

Pengecualian

innerStream tidak dapat dibaca.

-atau-

innerStream tidak dapat ditulis.

innerStreamadalah null.

-atau-

innerStream sama dengan Null.

Contoh

Contoh kode berikut membuat SslStream dan memulai bagian klien dari autentikasi.

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

Keterangan

Ketika Anda menentukan true untuk leaveStreamOpen parameter , menutup SslStream tidak berpengaruh pada innerStream aliran; Anda harus secara eksplisit menutup innerStream ketika Anda tidak lagi membutuhkannya.

Argumen userCertificateValidationCallback delegasi certificateErrors berisi kode kesalahan Windows yang dikembalikan oleh saluran Antarmuka Penyedia Dukungan Keamanan (SSPI). Nilai pengembalian metode yang dipanggil oleh userCertificateValidationCallback delegasi menentukan apakah autentikasi berhasil.

Protokol keamanan dan algoritma kriptografi sudah dipilih ketika userCertificateValidationCallback metode delegasi dipanggil. Anda dapat menggunakan metode untuk menentukan apakah algoritma dan kekuatan kriptografi yang dipilih cukup untuk aplikasi Anda. Jika tidak, metode harus kembali false untuk mencegah SslStream dibuatnya.

Jika nilai tidak ditentukan dalam file konfigurasi untuk encryptionpolicy, EncryptionPolicy defaultnya adalah EncryptionPolicy.RequireEncryption untuk SslStream instans yang dibangun.

Penggunaan cipher Null diperlukan ketika kebijakan enkripsi diatur ke EncryptionPolicy.NoEncryption.

Catatan

.NET menyimpan sesi SSL saat dibuat dan mencoba menggunakan kembali sesi yang di-cache untuk permintaan berikutnya, jika memungkinkan. Saat mencoba menggunakan kembali sesi SSL, Kerangka Kerja menggunakan elemen pertama yang X509Certificate2Collection disediakan selama autentikasi (jika ada), atau mencoba menggunakan kembali sesi anonim jika koleksi sertifikat kosong.

Catatan

Sertifikat klien tidak didukung dalam protokol SSL versi 2.

Berlaku untuk

SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)

Sumber:
SslStream.cs
Sumber:
SslStream.cs
Sumber:
SslStream.cs

Menginisialisasi instans SslStream baru kelas menggunakan , perilaku penutupan aliran yang ditentukan Stream, delegasi validasi sertifikat, dan delegasi pemilihan sertifikat.

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)

Parameter

innerStream
Stream

Objek Stream yang SslStream digunakan oleh untuk mengirim dan menerima data.

leaveInnerStreamOpen
Boolean

Nilai Boolean yang menunjukkan perilaku penutupan objek yang StreamSslStream digunakan oleh untuk mengirim dan menerima data. Parameter ini menunjukkan apakah aliran dalam dibiarkan terbuka.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Delegasi yang RemoteCertificateValidationCallback bertanggung jawab untuk memvalidasi sertifikat yang disediakan oleh pihak jarak jauh.

userCertificateSelectionCallback
LocalCertificateSelectionCallback

LocalCertificateSelectionCallback Delegasi yang bertanggung jawab untuk memilih sertifikat yang digunakan untuk autentikasi.

Pengecualian

innerStream tidak dapat dibaca.

-atau-

innerStream tidak dapat ditulis.

innerStreamadalah null.

-atau-

innerStream sama dengan Null.

Contoh

Contoh kode berikut menunjukkan pemanggilan konstruktor ini. Contoh ini adalah bagian dari contoh yang lebih besar yang disediakan untuk SslStream kelas .

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

Keterangan

Ketika Anda menentukan true untuk leaveStreamOpen parameter , menutup SslStream tidak berpengaruh pada innerStream aliran; Anda harus secara eksplisit menutup innerStream ketika Anda tidak lagi membutuhkannya.

Argumen userCertificateValidationCallback delegasi certificateErrors berisi kode kesalahan Windows yang dikembalikan oleh saluran Antarmuka Penyedia Dukungan Keamanan (SSPI). Nilai pengembalian metode yang dipanggil oleh userCertificateValidationCallback delegasi menentukan apakah autentikasi berhasil.

Protokol keamanan dan algoritma kriptografi sudah dipilih ketika userCertificateValidationCallback metode delegasi dipanggil. Anda dapat menggunakan metode untuk menentukan apakah algoritma dan kekuatan kriptografi yang dipilih cukup untuk aplikasi Anda. Jika tidak, metode harus kembali false untuk mencegah SslStream dibuatnya.

userCertificateSelectionCallback Delegasi berguna ketika aplikasi Anda memiliki beberapa sertifikat dan harus memilih sertifikat secara dinamis. Sertifikat di penyimpanan "MY" diteruskan ke metode yang dipanggil oleh delegasi.

Jika nilai tidak ditentukan dalam file konfigurasi untuk encryptionpolicy, EncryptionPolicy defaultnya adalah EncryptionPolicy.RequireEncryption untuk SslStream instans yang dibangun.

Penggunaan cipher Null diperlukan ketika kebijakan enkripsi diatur ke EncryptionPolicy.NoEncryption.

Catatan

.NET menyimpan sesi SSL saat dibuat dan mencoba menggunakan kembali sesi yang di-cache untuk permintaan berikutnya, jika memungkinkan. Saat mencoba menggunakan kembali sesi SSL, Kerangka Kerja menggunakan elemen pertama yang X509Certificate2Collection disediakan selama autentikasi (jika ada), atau mencoba menggunakan kembali sesi anonim jika koleksi sertifikat kosong.

Berlaku untuk

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

Sumber:
SslStream.IO.cs
Sumber:
SslStream.cs
Sumber:
SslStream.cs

Menginisialisasi instans SslStream baru kelas menggunakan yang ditentukan 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)

Parameter

innerStream
Stream

Objek Stream yang SslStream digunakan oleh untuk mengirim dan menerima data.

leaveInnerStreamOpen
Boolean

Nilai Boolean yang menunjukkan perilaku penutupan objek yang StreamSslStream digunakan oleh untuk mengirim dan menerima data. Parameter ini menunjukkan apakah aliran dalam dibiarkan terbuka.

userCertificateValidationCallback
RemoteCertificateValidationCallback

Delegasi yang RemoteCertificateValidationCallback bertanggung jawab untuk memvalidasi sertifikat yang disediakan oleh pihak jarak jauh.

userCertificateSelectionCallback
LocalCertificateSelectionCallback

LocalCertificateSelectionCallback Delegasi yang bertanggung jawab untuk memilih sertifikat yang digunakan untuk autentikasi.

encryptionPolicy
EncryptionPolicy

yang EncryptionPolicy akan digunakan.

Pengecualian

innerStream tidak dapat dibaca.

-atau-

innerStream tidak dapat ditulis.

-atau-

encryptionPolicy tidak valid.

innerStreamadalah null.

-atau-

innerStream sama dengan Null.

Keterangan

Penggunaan cipher Null diperlukan saat encryptionPolicy parameter diatur ke EncryptionPolicy.NoEncryption.

Berlaku untuk