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).
Contents
1Support
2History
2.1Next Protocol Negotiation
2.2Application-Layer Protocol Negotiation
3Example
4References
5External links
Support
ALPN is supported by these libraries:
BSAFE Micro Edition Suite since version 5.0[1]
GnuTLS since version 3.2.0 released in May 2013[2]
MatrixSSL since version 3.7.1 released in December 2014[3]
Network Security Services since version 3.15.5 released in April 2014[4]
OpenSSL since version 1.0.2 released in January 2015[5]
LibreSSL since version 2.1.3 released in January 2015[6]
mbed TLS (previously PolarSSL) since version 1.3.6 released in April 2014[7]
s2n since its original public release in June 2015.
wolfSSL (formerly CyaSSL) since version 3.7.0 released in October 2015[8]
Go (in the standard library crypto/tls package) since version 1.4 released in December 2014[9]
JSSE in Java since JDK 9 released in September 2017,[10] backported to JDK 8 released in April 2020[11]
Win32 SSPI since Windows 8.1 and Windows Server 2012 R2 were released October 18, 2013[12]
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 RFC 7301. 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:
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:
↑"MatrixSSL - News". 2014-12-04. Archived from the original on 2015-02-14. https://web.archive.org/web/20150214105056/http://www.matrixssl.org/news.html. Retrieved 2015-01-26.
↑"What's New in TLS/SSL (Schannel SSP)". 31 August 2016. https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831771(v=ws.11)?redirectedfrom=MSDN#whats-new-in-tlsssl-schannel-ssp-in-windows-server-2012-r2-and-windows-81. Retrieved 2020-03-30.
↑Langley, A. (January 20, 2010). Transport Layer Security (TLS) Next Protocol Negotiation Extension. https://datatracker.ietf.org/doc/html/draft-agl-tls-nextprotoneg-00.
↑Langley, Adam. "» NPN and ALPN". https://www.imperialviolet.org/2013/03/20/alpn.html. Retrieved 2 April 2013.
↑Langley, Adam. "False Start's Failure (11 Apr 2012)". https://www.imperialviolet.org/2012/04/11/falsestart.html. Retrieved 25 September 2013.
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)