Согласование протокола прикладного уровня
Согласование протокола уровня приложения ( ALPN ) — это расширение безопасности транспортного уровня (TLS), которое позволяет уровню приложения согласовывать, какой протокол должен выполняться через безопасное соединение, таким образом, чтобы избежать дополнительных двусторонних обходов и который не зависит от уровня приложения. протоколы. Он используется для установления соединений HTTP/2 без дополнительных двусторонних обходов (клиент и сервер могут обмениваться данными с портами, ранее назначенными для HTTPS, с помощью HTTP/1.1 и обновиться до использования HTTP/2 или продолжить работу с HTTP/1.1, не закрывая первоначальное соединение).
Поддерживать
[ редактировать ]ALPN поддерживается следующими библиотеками:
- BSAFE Micro Edition Suite, начиная с версии 5.0 [1]
- GnuTLS начиная с версии 3.2.0, выпущенной в мае 2013 г. [2]
- MatrixSSL начиная с версии 3.7.1, выпущенной в декабре 2014 г. [3]
- Службы сетевой безопасности , начиная с версии 3.15.5, выпущенной в апреле 2014 г. [4]
- OpenSSL начиная с версии 1.0.2, выпущенной в январе 2015 г. [5]
- LibreSSL начиная с версии 2.1.3, выпущенной в январе 2015 г. [6]
- mbed TLS (ранее PolarSSL), начиная с версии 1.3.6, выпущенной в апреле 2014 г. [7]
- s2n с момента его первоначального публичного выпуска в июне 2015 года.
- wolfSSL (ранее CyaSSL), начиная с версии 3.7.0, выпущенной в октябре 2015 г. [8]
- Go (в стандартном пакете библиотеки crypto/tls), начиная с версии 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]
История
[ редактировать ]Следующее согласование протокола
[ редактировать ]В январе 2010 года Google представил проект стандарта IETF, описывающий расширение TLS для согласования следующего протокола. [13] Это расширение использовалось для согласования экспериментальных соединений SPDY между Google Chrome и некоторыми серверами Google. По мере развития SPDY NPN была заменена на ALPN.
Согласование протокола прикладного уровня
[ редактировать ]11 июля 2014 г. ALPN был опубликован как РФК 7301 . ALPN заменяет расширение Next Protocol Negotiation (NPN). [14]
TLS False Start отключен в Google Chrome начиная с версии 20 (2012 г.), за исключением веб-сайтов с более ранним расширением NPN. [15]
Пример
[ редактировать ]ALPN — это расширение TLS, которое отправляется при начальном рукопожатии TLS «Client Hello» и перечисляет протоколы, которые поддерживает клиент (например, веб-браузер):
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
Ссылки
[ редактировать ]- ^ «Информация о выпуске Dell BSAFE Micro Edition Suite 5.0» . Проверено 18 октября 2022 г.
- ^ "gnutls 3.2.0" . Архивировано из оригинала 31 января 2016 г. Проверено 26 января 2015 г.
- ^ «МатриксSSL - Новости» . 04.12.2014. Архивировано из оригинала 14 февраля 2015 г. Проверено 26 января 2015 г.
- ^ «Примечания к выпуску NSS 3.15.5» . Сеть разработчиков Mozilla . Мозилла . Проверено 26 января 2015 г.
- ^ «Примечания к выпуску OpenSSL 1.0.2» . Проект OpenSSL . 22 января 2015 г. Архивировано из оригинала 4 сентября 2014 г. Проверено 26 января 2015 г.
- ^ «Выпущен LibreSSL 2.1.3» . 22 января 2015 г. Проверено 26 января 2015 г.
- ^ «Обзор загрузки — PolarSSL» . 11 апреля 2014 г. Архивировано из оригинала 9 февраля 2015 г. Проверено 26 января 2015 г.
- ^ «Журнал изменений выпуска wolfSSL» . 26 октября 2015 г. Проверено 11 сентября 2015 г.
- ^ «Примечания к выпуску Go 1.4» . 10 декабря 2014 г. Проверено 28 ноября 2017 г.
- ^ «JEP 244: Расширение согласования протокола уровня приложений TLS» . 07.08.2017 . Проверено 29 августа 2018 г.
- ^ «Примечание к выпуску: расширение согласования протокола уровня приложений TLS» . 30 апреля 2020 г. Проверено 11 июня 2020 г.
- ^ «Что нового в TLS/SSL (Schannel SSP)» . 31 августа 2016 года . Проверено 30 марта 2020 г.
- ^ Лэнгли, А. (20 января 2010 г.). «Расширение согласования следующего протокола безопасности транспортного уровня (TLS)» . Трекер данных IETF .
- ^ Лэнгли, Адам. «» НПН и АЛПН» . Проверено 2 апреля 2013 г.
- ^ Лэнгли, Адам. «Провал фальстарта (11 апреля 2012 г.)» . Проверено 25 сентября 2013 г.
Внешние ссылки
[ редактировать ]- Реестр идентификаторов протокола ALPN поддерживается IANA как расширение TLS.
- Draft-agl-tls-nextprotoneg-04 (проект NPN) (последнее обновление: май 2012 г.)
- RFC 7301 «Расширение согласования протокола уровня приложений (TLS)»