Application-Layer Protocol Negotiation

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

ALPN (англ. Application-Layer Protocol Negotiation — протокол узгодження прикладного рівня) — це розширення Transport Layer Security (TLS), яке дозволяє прикладному рівню узгоджувати, який протокол слід виконувати через захищене з'єднання, таким чином, щоб уникнути додаткових двосторонніх запитів, і яке не залежить від протоколів прикладного рівня. Це потрібно для безпечних з'єднань HTTP/2, що покращує стиснення вебсторінок і зменшує їх затримку у порівнянні з HTTP/1.x. Стандарт ALPN з'явився внаслідок роботи Google, над уже вилученим протоколом SPDY, який став основою HTTP/2.

Підтримка

[ред. | ред. код]

ALPN підтримується цими бібліотеками.

  • GnuTLS з версії 3.2.0, випущеної у травні 2013.[1]
  • MatrixSSL з версії 3.7.1, випущеної у грудні 2014.[2]
  • Network Security Services з версії 3.15.5, випущеної у квітні 2014.[3]
  • OpenSSL з версії 1.0.2, випущеної у січні 2015.[4]
  • LibreSSL з версії 2.1.3, випущеної у січні 2015.[5]
  • mbed TLS (раніше PolarSSL) з версії 1.3.6, випущеної у квітні 2014.[6]
  • SChannel з Windows 8.1 / 2012 R2.
  • s2n з моменту першого публічного випуску, у червні 2015.
  • wolfSSL (раніше CyaSSL) з версії 3.7.0, випущеної у жовтні 2015.[7]
  • Go (у стандартній бібліотеці crypto/tls) з версії 1.4, випущеної у грудні 2014.[8]
  • picotls.[9]
  • JSSE в Java, починаючи з випуску JDK 9, у вересні 2017.[10], зворотно перенесена[en] у JDK 8, починаючи з квітня 2020.[11]
  • BearSSL з версії 0.3.[12]
  • Win32 SSPI з часу випуску Windows 8.1 та Windows Server 2012 R2, 18 жовтня 2013.[13]

Історія

[ред. | ред. код]

11 липня 2014 р. ALPN був опублікований як RFC 7301. Згодом замінює NPN.[14]

Помилковий запуск TLS було вимкнено у Google Chrome, з версії 20 (2012), за винятком вебсайтів із попереднім розширенням NPN (англ. Next Protocol Negotiation — узгодження наступного протоколу).[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

Примітки

[ред. | ред. код]
  1. gnutls 3.2.0. Архів оригіналу за 31 січня 2016. Процитовано 26 січня 2015.
  2. MatrixSSL - News. 4 грудня 2014. Архів оригіналу за 14 лютого 2015. Процитовано 26 січня 2015.
  3. NSS 3.15.5 release notes. Mozilla Developer Network. Mozilla. Архів оригіналу за 26 січня 2015. Процитовано 26 січня 2015.
  4. OpenSSL 1.0.2 release notes. The OpenSSL Project. The OpenSSL Project. 22 січня 2015. Архів оригіналу за 4 вересня 2014. Процитовано 26 січня 2015.
  5. LibreSSL 2.1.3 released. 22 січня 2015. Архів оригіналу за 31 січня 2016. Процитовано 26 січня 2015.
  6. Download overview - PolarSSL. 11 квітня 2014. Архів оригіналу за 9 лютого 2015. Процитовано 26 січня 2015.
  7. wolfSSL Release Change Log. 26 жовтня 2015. Архів оригіналу за 16 березня 2016. Процитовано 11 вересня 2015.
  8. Go 1.4 Release Notes. 10 грудня 2014. Архів оригіналу за 16 вересня 2020. Процитовано 28 листопада 2017.
  9. Picotls. Github. Архів оригіналу за 23 березня 2019. Процитовано 2 серпня 2018.
  10. JEP 244: TLS Application-Layer Protocol Negotiation Extension. 7 серпня 2017. Архів оригіналу за 21 жовтня 2020. Процитовано 29 серпня 2018.
  11. {{cite web|title=Release Note: TLS Application-Layer Protocol Negotiation Extension|url=https://bugs.openjdk.java.net/browse/JDK-8242894%7Cdate=2020-04-30%7Caccessdate=2020-06-11}
  12. BearSSL - Changelog. Архів оригіналу за 9 травня 2021. Процитовано 8 вересня 2010.
  13. What's New in TLS/SSL (Schannel SSP). Архів оригіналу за 14 вересня 2020. Процитовано 30 березня 2020.
  14. Langley, Adam. » NPN and ALPN. Архів оригіналу за 8 серпня 2013. Процитовано 2 квітня 2013.
  15. Langley, Adam. False Start's Failure (11 Apr 2012). Архів оригіналу за 12 вересня 2013. Процитовано 25 вересня 2013.

Посилання

[ред. | ред. код]