Поделиться через


SslApplicationProtocol Структура

Определение

Представляет значение протокола приложения TLS.

public value class SslApplicationProtocol : IEquatable<System::Net::Security::SslApplicationProtocol>
public readonly struct SslApplicationProtocol : IEquatable<System.Net.Security.SslApplicationProtocol>
type SslApplicationProtocol = struct
Public Structure SslApplicationProtocol
Implements IEquatable(Of SslApplicationProtocol)
Наследование
SslApplicationProtocol
Реализации

Примеры

В следующем примере кода демонстрируется согласование протокола уровня приложения в SslStream. Сервер объявляет поддержку protocol1 и protocol2. Клиент объявляет поддержку protocol2 и protocol3. Часто поддерживаемый протокол (protocol2) согласовывается во время подтверждения.

async Task Server(NetworkStream stream, X509Certificate2 serverCertificate)
{
    using var server = new SslStream(stream);

    await server.AuthenticateAsServerAsync(new SslServerAuthenticationOptions
    {
        ServerCertificate = serverCertificate,
        ApplicationProtocols = new()
        {
            new("protocol1"),
            new("protocol2"),
        }
    });

    string protocol = Encoding.ASCII.GetString(server.NegotiatedApplicationProtocol.Protocol.Span);
    System.Console.WriteLine($"Server - negotiated protocol: {protocol}");
}

async Task Client(NetworkStream stream, string hostName)
{
    using var client = new SslStream(stream);

    await client.AuthenticateAsClientAsync(new SslClientAuthenticationOptions
    {
        // the host name must match the name on the certificate used on the server side
        TargetHost = hostName,
        ApplicationProtocols = new()
        {
            new("protocol2"),
            new("protocol3")
        }
    });

    string protocol = Encoding.ASCII.GetString(client.NegotiatedApplicationProtocol.Protocol.Span);
    System.Console.WriteLine($"Client - negotiated protocol: {protocol}");
}

// possible output:
//   Server - negotiated protocol: protocol2
//   Client - negotiated protocol: protocol2
Async Function Server(stream As NetworkStream, serverCertificate As X509Certificate2) As Task
    Using serverStream As SslStream = new SslStream(stream)
        Dim options as New SslServerAuthenticationOptions() With
        {
            .ServerCertificate = serverCertificate,
            .ApplicationProtocols = New List(Of SslApplicationProtocol) From
            {
                New SslApplicationProtocol("protocol1"),
                New SslApplicationProtocol("protocol2")
            }
        }
        Await serverStream.AuthenticateAsServerAsync(options)

        Dim protocol As String = Encoding.ASCII.GetString(
            serverStream.NegotiatedApplicationProtocol.Protocol.Span)
        System.Console.WriteLine($"Server - negotiated protocol: {protocol}")
    End Using
End Function

Async Function Client(stream As NetworkStream, hostName As String ) As Task
    Using clientStream As SslStream = new SslStream(stream)
        Dim options as New SslClientAuthenticationOptions() With
        {
            .TargetHost = hostName,
            .ApplicationProtocols = New List(Of SslApplicationProtocol) From
            {
                New SslApplicationProtocol("protocol2"),
                New SslApplicationProtocol("protocol3")
            }
        }
        Await clientStream.AuthenticateAsClientAsync(options)

        Dim protocol As String = Encoding.ASCII.GetString(
            clientStream.NegotiatedApplicationProtocol.Protocol.Span)
        System.Console.WriteLine($"Client - negotiated protocol: {protocol}")
    End Using
End Function

' possible output:
'   Server - negotiated protocol: protocol2
'   Client - negotiated protocol: protocol2

Комментарии

Этот тип содержит статические поля с предопределенными SslApplicationProtocol значениями для версий HTTP.

Во время подтверждения клиент отправляет список доступных протоколов ALPN, и сервер выбирает наиболее подходящее из этого списка.

Полный список поддерживаемых протоколов см. в разделе Идентификаторы протоколов TLS Application-Layer протоколов (ALPN).

Конструкторы

SslApplicationProtocol(Byte[])

Инициализирует новый экземпляр класса SslApplicationProtocol.

SslApplicationProtocol(String)

Инициализирует новый экземпляр класса SslApplicationProtocol.

Поля

Http11

Возвращает объект SslApplicationProtocol, представляющий протокол приложения HTTP/1.1 TLS.

Http2

Возвращает объект SslApplicationProtocol, представляющий протокол приложения HTTP/2 TLS.

Http3

Определяет SslApplicationProtocol экземпляр для HTTP 3.0.

Свойства

Protocol

Возвращает текущий протокол приложения TLS, представленный этим объектом SslApplicationProtocol.

Методы

Equals(Object)

Сравнивает SslApplicationProtocol с указанным объектом.

Equals(SslApplicationProtocol)

Сравнивает объект SslApplicationProtocol с заданным экземпляром класса SslApplicationProtocol.

GetHashCode()

Возвращает хэш-код экземпляра класса SslApplicationProtocol.

ToString()

Переопределяет метод ToString().

Операторы

Equality(SslApplicationProtocol, SslApplicationProtocol)

Оператор равенства для сравнения двух объектов SslApplicationProtocol.

Inequality(SslApplicationProtocol, SslApplicationProtocol)

Оператор неравенства для сравнения двух объектов SslApplicationProtocol.

Применяется к