Application-Layer Protocol Negotiation Explained

Application-Layer Protocol Negotiation (ALPN) is a Transport Layer Security (TLS) extension that allows the application layer to negotiate which protocol should be performed over a secure connection in a manner that avoids additional round trips and which is independent of the application-layer protocols. It is used to establish HTTP/2 connections without additional round trips (client and server can communicate over to ports previously assigned to HTTPS with HTTP/1.1 and upgrade to use HTTP/2 or continue with HTTP/1.1 without closing the initial connection).

Support

ALPN is supported by these libraries:

History

Next Protocol Negotiation

In January 2010, Google introduced IETF standard draft describing Next Protocol Negotiation TLS extension.[13] This extension was used to negotiate experimental SPDY connections between Google Chrome and some of Google's servers. As SPDY evolved, NPN was replaced with ALPN.

Application-Layer Protocol Negotiation

On July 11, 2014, ALPN was published as . ALPN replaces Next Protocol Negotiation (NPN) extension.[14]

TLS False Start was disabled in Google Chrome from version 20 (2012) onward except for websites with the earlier NPN extension.[15]

Example

ALPN is a TLS extension which is sent on the initial TLS handshake 'Client Hello', and it lists the protocols that the client (for example the web browser) supports:

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

The resulting 'Server Hello' from the web server will also contain the ALPN extension, and it confirms which protocol will be used for the HTTP request:

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

External links

Notes and References

  1. Web site: Dell BSAFE Micro Edition Suite 5.0 Release Advisory. 2022-10-18.
  2. Web site: gnutls 3.2.0. 2015-01-26. https://web.archive.org/web/20160131230710/http://article.gmane.org/gmane.network.gnutls.general/3136. 2016-01-31. dead.
  3. Web site: MatrixSSL - News . 2014-12-04 . 2015-01-26 . dead . https://web.archive.org/web/20150214105056/http://www.matrixssl.org/news.html . 2015-02-14 .
  4. Web site: NSS 3.15.5 release notes. Mozilla Developer Network. Mozilla. 2015-01-26.
  5. Web site: OpenSSL 1.0.2 release notes. 2015-01-22. The OpenSSL Project. 2015-01-26. 2014-09-04. https://web.archive.org/web/20140904045720/http://www.openssl.org/news/openssl-1.0.2-notes.html. dead.
  6. Web site: LibreSSL 2.1.3 released. 2015-01-22. 2015-01-26.
  7. Web site: Download overview - PolarSSL. 2014-04-11. 2015-01-26. 2015-02-09. https://web.archive.org/web/20150209195111/https://polarssl.org/tech-updates/releases/polarssl-1.3.6-released. dead.
  8. Web site: wolfSSL Release Change Log. 2015-10-26 . 2015-09-11.
  9. Web site: Go 1.4 Release Notes. 2014-12-10. 2017-11-28.
  10. Web site: JEP 244: TLS Application-Layer Protocol Negotiation Extension. 2017-08-07. 2018-08-29.
  11. Web site: Release Note: TLS Application-Layer Protocol Negotiation Extension. 2020-04-30. 2020-06-11.
  12. Web site: What's New in TLS/SSL (Schannel SSP). 31 August 2016 . 2020-03-30.
  13. Langley. A.. January 20, 2010. Transport Layer Security (TLS) Next Protocol Negotiation Extension. IETF Datatracker.
  14. Web site: Langley. Adam. ยป NPN and ALPN. 2 April 2013.
  15. Web site: Langley. Adam. False Start's Failure (11 Apr 2012). 25 September 2013.