Русская Википедия:ALPN

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

ALPN (Шаблон:Lang-en — согласование протокола прикладного уровня) — расширение протокола TLS, которое позволяет на прикладном уровне модели OSI согласовать протокол безопасного соединения, что позволяет избежать дополнительных циклов и который не зависит от целевого протокола прикладного уровня. ALPN используется для установления соединений HTTP/2 без дополнительных циклов согласования протокола обмена данными (клиент и сервер могут обмениваться данными HTTP/2 через порты, назначенные для HTTPS с HTTP/1.1, или продолжать использовать HTTP/1.1, не создавая новое соединение и не закрывая исходное).

Поддержка ALPN в ПО

ALPN поддерживают следующие библиотеки:

  • Шаблон:Не переведено 4, начиная с версии 5.0[1];
  • GnuTLS, начиная с версии 3.2.0 (выпущена в мае 2013)[2];
  • Шаблон:Не переведено 4 начиная с версии 3.7.1 (выпущена в декабре 2014)[3];
  • Network Security Services, начиная с версии 3.15.5 (выпущена в апреле 2014)[4];
  • OpenSSL с версии 1.0.2 (выпущена в январе 2015)[5];
  • LibreSSL с версии 2.1.3 (выпущена в январе 2015)[6];
  • Шаблон:Нп4 (ранее называлась PolarSSL), начиная с версии 1.3.6, (выпущена в апреле 2014)[7];
  • Шаблон:Не переведено 4 с первой версии (выпущена в июне 2015 года);
  • wolfSSL (прежнее название — CyaSSL) с версии 3.7.0 (выпущена в октябре 2015)[8];
  • пакет crypto/tls стандартной библиотеки языка программирования Go версий 1.4 и новее (вышедшей в декабре 2014)[9];
  • расширение JSSE в Java, начиная с JDK 9 (вышел в сентябре 2017)[10] и в версии JDK 8, вышедшей в апреле 2020[11];
  • Win32 SSPI, начиная с Windows 8.1 и Windows Server 2012 R2, вышедших 18 октября 2013[12].

История

Next Protocol Negotiation

В январе 2010 года компания Google представила проект стандарта IETF, описывающий расширение Next Protocol Negotiation для протокола TLS[13]. Это расширение использовалось для согласования экспериментальных соединений SPDY между Google Chrome и некоторыми серверами Google. По мере развития SPDY NPN был заменен на ALPN.

Application-Layer Protocol Negotiation

11 июля 2014 года был опубликован RFC 7301, описывающий ALPN как замену расширения Google Next Protocol Negotiation (NPN)[14].

В 2012 году в версии 20 браузера Google Chrome был отключен TLS False Start, за исключением веб-сайтов с более ранним расширением NPN[15].

Пример

ALPN — это расширение TLS, которое отправляется в процессе начального «рукопожатия» TLS (Client Hello).

Пример запроса Client Hello с использованием ALPN (начального «рукопожатия» TLS), в котором перечислены протоколы, поддерживаемые клиентом (клиент, например, является веб-браузером)

    Handshake Type: Client Hello (1)
    Length: 141
    Version: TLS 1.2 (0x0303)
    Random: dd67b5943e5efd0740519f38071008b59efbd68ab3114587...
    Session ID Length: 0
    Cipher Suites Length: 10
    Cipher Suites (5 suites)
    Compression Methods Length: 1
    Compression Methods (1 method)
    Extensions Length: 90
    [other extensions omitted]
    Extension: application_layer_protocol_negotiation (len=14)
        Type: application_layer_protocol_negotiation (16)
        Length: 14
        ALPN Extension Length: 12
        ALPN Protocol
            ALPN string length: 2
            ALPN Next Protocol: h2
            ALPN string length: 8
            ALPN Next Protocol: http/1.1

Ответный Server Hello, полученный от веб-сервера, также содержащий расширение ALPN — в нём сервер подтверждает, какой протокол будет использоваться в последующих запросах HTTP:

    Handshake Type: Server Hello (2)
    Length: 94
    Version: TLS 1.2 (0x0303)
    Random: 44e447964d7e8a7d3b404c4748423f02345241dcc9c7e332...
    Session ID Length: 32
    Session ID: 7667476d1d698d0a90caa1d9a449be814b89a0b52f470e2d...
    Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
    Compression Method: null (0)
    Extensions Length: 22
    [other extensions omitted]
    Extension: application_layer_protocol_negotiation (len=5)
        Type: application_layer_protocol_negotiation (16)
        Length: 5
        ALPN Extension Length: 3
        ALPN Protocol
            ALPN string length: 2
            ALPN Next Protocol: h2

Примечания

Шаблон:Примечания

Литература