SslStream Конструкторы
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Инициализирует новый экземпляр класса SslStream.
Перегрузки
| Имя | Описание |
|---|---|
| SslStream(Stream) |
Инициализирует новый экземпляр класса с помощью указанного SslStreamStream. |
| SslStream(Stream, Boolean) |
Инициализирует новый экземпляр класса с помощью указанного SslStreamStream и режима закрытия потока. |
| SslStream(Stream, Boolean, RemoteCertificateValidationCallback) |
Инициализирует новый экземпляр SslStream класса, используя указанное Streamповедение закрытия потока и делегат проверки сертификатов. |
| SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback) |
Инициализирует новый экземпляр класса, используя указанное SslStreamповедение закрытия потока, делегат проверки сертификатов Stream и делегат выбора сертификатов. |
| SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback, EncryptionPolicy) |
Инициализирует новый экземпляр класса с помощью указанного SslStreamStream. |
Комментарии
Чтобы предотвратить SslStream закрытие указанного потока, используйте SslStream конструктор.
SslStream(Stream)
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- 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)
Параметры
Исключения
Комментарии
Если значение не указано в файле конфигурации для шифрования, EncryptionPolicy значение по умолчанию используется EncryptionPolicy.RequireEncryption для созданного SslStream экземпляра.
Использование шифра NULL требуется, если для политики шифрования задана политика EncryptionPolicy.NoEncryptionшифрования.
Применяется к
SslStream(Stream, Boolean)
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- 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)
Параметры
- leaveInnerStreamOpen
- Boolean
Логическое значение, указывающее поведение закрытия объекта, используемого StreamSslStream для отправки и получения данных. Этот параметр указывает, остается ли внутренний поток открытым.
Исключения
Примеры
В следующем примере кода демонстрируется вызов этого конструктора.
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
Комментарии
При указании true параметра leaveStreamOpen закрытие SslStream не влияет на innerStream поток; необходимо явно закрыть innerStream , если он больше не нужен.
Если значение не указано в файле конфигурации для шифрования, EncryptionPolicy значение по умолчанию используется EncryptionPolicy.RequireEncryption для созданного SslStream экземпляра.
Использование шифра NULL требуется, если для политики шифрования задана политика EncryptionPolicy.NoEncryptionшифрования.
Применяется к
SslStream(Stream, Boolean, RemoteCertificateValidationCallback)
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- 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)
Параметры
- leaveInnerStreamOpen
- Boolean
Логическое значение, указывающее поведение закрытия объекта, используемого StreamSslStream для отправки и получения данных. Этот параметр указывает, остается ли внутренний поток открытым.
- userCertificateValidationCallback
- RemoteCertificateValidationCallback
Делегат RemoteCertificateValidationCallback , ответственный за проверку сертификата, предоставленного удаленной стороной.
Исключения
Примеры
В следующем примере кода создается SslStream и инициируется клиентская часть проверки подлинности.
// 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
Комментарии
При указании true параметра leaveStreamOpen закрытие SslStream не влияет на innerStream поток; необходимо явно закрыть innerStream , если он больше не нужен.
Аргумент userCertificateValidationCallback делегата certificateErrors содержит все коды ошибок Windows, возвращаемые интерфейсом поставщика поддержки безопасности канала (SSPI). Возвращаемое значение метода, вызываемого делегатом userCertificateValidationCallback , определяет, выполнена ли проверка подлинности.
Протокол безопасности и криптографические алгоритмы уже выбраны при userCertificateValidationCallback вызове метода делегата. Этот метод можно использовать для определения того, достаточно ли для приложения выбранные алгоритмы шифрования и сильные стороны. Если нет, метод должен вернуться false , чтобы предотвратить SslStream создание.
Если значение не указано в файле конфигурации для шифрования, EncryptionPolicy значение по умолчанию используется EncryptionPolicy.RequireEncryption для созданного SslStream экземпляра.
Использование шифра NULL требуется, если для политики шифрования задана политика EncryptionPolicy.NoEncryptionшифрования.
Note
.NET кэширует сеансы SSL по мере их создания и пытается повторно использовать кэшированный сеанс для последующих запросов, если это возможно. При попытке повторного использования сеанса SSL платформа использует первый элемент предоставленного X509Certificate2Collection во время проверки подлинности (если есть один), или пытается повторно использовать анонимные сеансы, если коллекция сертификатов пуста.
Note
Сертификаты клиента не поддерживаются в протоколе SSL версии 2.
Применяется к
SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback)
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- 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)
Параметры
- leaveInnerStreamOpen
- Boolean
Логическое значение, указывающее поведение закрытия объекта, используемого StreamSslStream для отправки и получения данных. Этот параметр указывает, остается ли внутренний поток открытым.
- userCertificateValidationCallback
- RemoteCertificateValidationCallback
Делегат RemoteCertificateValidationCallback , ответственный за проверку сертификата, предоставленного удаленной стороной.
- userCertificateSelectionCallback
- LocalCertificateSelectionCallback
Делегат LocalCertificateSelectionCallback , ответственный за выбор сертификата, используемого для проверки подлинности.
Исключения
Примеры
В следующем примере кода демонстрируется вызов этого конструктора. Этот пример является частью более крупного примера, предоставленного SslStream для класса.
// 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))
Комментарии
При указании true параметра leaveStreamOpen закрытие SslStream не влияет на innerStream поток; необходимо явно закрыть innerStream , если он больше не нужен.
Аргумент userCertificateValidationCallback делегата certificateErrors содержит все коды ошибок Windows, возвращаемые интерфейсом поставщика поддержки безопасности канала (SSPI). Возвращаемое значение метода, вызываемого делегатом userCertificateValidationCallback , определяет, выполнена ли проверка подлинности.
Протокол безопасности и криптографические алгоритмы уже выбраны при userCertificateValidationCallback вызове метода делегата. Этот метод можно использовать для определения того, достаточно ли для приложения выбранные алгоритмы шифрования и сильные стороны. Если нет, метод должен вернуться false , чтобы предотвратить SslStream создание.
Делегат userCertificateSelectionCallback полезен, если приложение имеет несколько сертификатов и должно динамически выбирать сертификат. Сертификаты в хранилище MY передаются в метод, вызываемый делегатом.
Если значение не указано в файле конфигурации для шифрования, EncryptionPolicy значение по умолчанию используется EncryptionPolicy.RequireEncryption для созданного SslStream экземпляра.
Использование шифра NULL требуется, если для политики шифрования задана политика EncryptionPolicy.NoEncryptionшифрования.
Note
.NET кэширует сеансы SSL по мере их создания и пытается повторно использовать кэшированный сеанс для последующих запросов, если это возможно. При попытке повторного использования сеанса SSL платформа использует первый элемент предоставленного X509Certificate2Collection во время проверки подлинности (если есть один), или пытается повторно использовать анонимные сеансы, если коллекция сертификатов пуста.
Применяется к
SslStream(Stream, Boolean, RemoteCertificateValidationCallback, LocalCertificateSelectionCallback, EncryptionPolicy)
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- SslStream.IO.cs
- Исходный код:
- SslStream.cs
- Исходный код:
- 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)
Параметры
- leaveInnerStreamOpen
- Boolean
Логическое значение, указывающее поведение закрытия объекта, используемого StreamSslStream для отправки и получения данных. Этот параметр указывает, остается ли внутренний поток открытым.
- userCertificateValidationCallback
- RemoteCertificateValidationCallback
Делегат RemoteCertificateValidationCallback , ответственный за проверку сертификата, предоставленного удаленной стороной.
- userCertificateSelectionCallback
- LocalCertificateSelectionCallback
Делегат LocalCertificateSelectionCallback , ответственный за выбор сертификата, используемого для проверки подлинности.
- encryptionPolicy
- EncryptionPolicy
Используется EncryptionPolicy .
Исключения
innerStream не является читаемым.
–или–
innerStream не является записываемым.
–или–
encryptionPolicy недопустимо.
Комментарии
Использование шифра NULL требуется, если encryptionPolicy параметр имеет значение EncryptionPolicy.NoEncryption.