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], зворотно перенесена у 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.[недоступне посилання]
  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. Процитовано 26 січня 2015.
  6. Download overview - PolarSSL. 11 квітня 2014. Процитовано 26 січня 2015.
  7. wolfSSL Release Change Log. 26 жовтня 2015. Процитовано 11 вересня 2015.
  8. Go 1.4 Release Notes. 10 грудня 2014. Процитовано 28 листопада 2017.
  9. Picotls. Github. Процитовано 2 серпня 2018.
  10. JEP 244: TLS Application-Layer Protocol Negotiation Extension. 7 серпня 2017. Процитовано 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. Процитовано 8 вересня 2010.
  13. What's New in TLS/SSL (Schannel SSP). Процитовано 30 березня 2020.
  14. Langley, Adam. » NPN and ALPN. Процитовано 2 квітня 2013.
  15. Langley, Adam. False Start's Failure (11 Apr 2012). Процитовано 25 вересня 2013.

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.