Application-Layer Protocol Negotiation (ALPN) is a
Transport Layer Security
Transport Layer Security (TLS) is a cryptographic protocol designed to provide communications security over a computer network, such as the Internet. The protocol is widely used in applications such as email, instant messaging, and voice over ...
(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
HTTP/2 (originally named HTTP/2.0) is a major revision of the HTTP network protocol used by the World Wide Web. It was derived from the earlier experimental SPDY protocol, originally developed by Google. HTTP/2 was developed by the HTTP Working ...
connections without additional round trips (client and server can communicate over two 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:
*
BSAFE Micro Edition Suite since version 5.0
*
GnuTLS since version 3.2.0 released in May 2013
*
MatrixSSL since version 3.7.1 released in December 2014
*
Network Security Services since version 3.15.5 released in April 2014
*
OpenSSL
OpenSSL is a software library for applications that provide secure communications over computer networks against eavesdropping, and identify the party at the other end. It is widely used by Internet servers, including the majority of HTTPS web ...
since version 1.0.2 released in January 2015
*
LibreSSL since version 2.1.3 released in January 2015
*
mbed TLS
Mbed TLS (previously PolarSSL) is an implementation of the Transport Layer Security, TLS and SSL protocols and the respective cryptographic algorithms and support code required. It is distributed under the Apache License version 2.0. Stated on t ...
(previously PolarSSL) since version 1.3.6 released in April 2014
*
s2n since its original public release in June 2015.
*
wolfSSL (formerly CyaSSL) since version 3.7.0 released in October 2015
*
Go (in the standard library crypto/tls package) since version 1.4 released in December 2014
*
JSSE in
Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
since JDK 9 released in September 2017,
backported to JDK 8 released in April 2020
*
Win32 SSPI since Windows 8.1 and Windows Server 2012 R2 were released October 18, 2013
[ ]
History
Next Protocol Negotiation
In January 2010, Google introduced IETF standard draft describing Next Protocol Negotiation TLS extension. 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.
TLS False Start was disabled in
Google Chrome
Google Chrome is a web browser developed by Google. It was first released in 2008 for Microsoft Windows, built with free software components from Apple WebKit and Mozilla Firefox. Versions were later released for Linux, macOS, iOS, iPadOS, an ...
from version 20 (2012) onward except for websites with the earlier NPN extension.
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
ther 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
ther 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
References
External links
The registry of ALPN protocol IDs is maintained by IANA as a TLS extension.draft-agl-tls-nextprotoneg-04 (NPN draft)(last updated: May 2012)
* "Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension"
{{SSL/TLS
Transport Layer Security
Telecommunications engineering
Internet architecture
Network performance