Согласование протокола уровня приложения ( ALPN ) — это расширение Transport Layer Security (TLS), которое позволяет прикладному уровню согласовывать, какой протокол должен выполняться по защищенному соединению, таким образом, чтобы избежать дополнительных круговых обходов и который не зависит от протоколов уровня приложения. Он используется для установления соединений HTTP/2 без дополнительных круговых обходов (клиент и сервер могут взаимодействовать через порты, ранее назначенные для HTTPS с HTTP/1.1 , и обновиться для использования HTTP/2 или продолжить работу с HTTP/1.1, не закрывая первоначальное соединение).
ALPN поддерживается следующими библиотеками:
В январе 2010 года Google представил проект стандарта IETF, описывающий расширение Next Protocol Negotiation TLS. [13] Это расширение использовалось для согласования экспериментальных соединений SPDY между Google Chrome и некоторыми серверами Google. По мере развития SPDY NPN был заменен на ALPN.
11 июля 2014 года ALPN был опубликован как RFC 7301. ALPN заменяет расширение Next Protocol Negotiation (NPN). [14]
TLS False Start был отключен в Google Chrome, начиная с версии 20 (2012) и далее, за исключением веб-сайтов с более ранним расширением NPN. [15]
ALPN — это расширение TLS, которое отправляется при начальном TLS-рукопожатии «Client Hello» и содержит список протоколов, которые поддерживает клиент (например, веб-браузер):
Тип рукопожатия : Приветствие клиента ( 1 ) Длина : 141 Версия : TLS 1.2 ( 0x0303 ) Случайный : dd67b5943e5efd0740519f38071008b59efbd68ab3114587 .. . Длина идентификатора сеанса : 0 Наборы шифров Длина : 10 Наборы шифров ( 5 наборов ) Методы сжатия Длина : 1 Методы сжатия ( 1 метод ) Расширения Длина : 90 [ другие расширения опущены ] Расширение : application_layer_protocol_negotiation ( len = 14 ) Тип : application_layer_protocol_negotiation ( 16 ) Длина : 14 Расширение ALPN Длина : 12 Протокол ALPN Длина строки ALPN : 2 Следующий протокол ALPN : h2 Длина строки ALPN : 8 Следующий протокол ALPN : http / 1.1
Полученное в результате сообщение «Server Hello» от веб-сервера также будет содержать расширение ALPN и подтверждать, какой протокол будет использоваться для HTTP-запроса:
Тип рукопожатия : Server Hello ( 2 ) Длина : 94 Версия : TLS 1.2 ( 0x0303 ) Случайный : 44 e447964d7e8a7d3b404c4748423f02345241dcc9c7e332 .. . Идентификатор сеанса Длина : 32 Идентификатор сеанса : 7667476 d1d698d0a90caa1d9a449be814b89a0b52f470e2d .. . Набор шифров : TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ( 0xc02f ) Метод сжатия : null ( 0 ) Длина расширений : 22 [ другие расширения опущены ] Расширение : application_layer_protocol_negotiation ( len = 5 ) Тип : application_layer_protocol_negotiation ( 16 ) Длина : 5 Длина расширения ALPN : 3 Протокол ALPN Длина строки ALPN : 2 Следующий протокол ALPN : h2