La negociación de protocolos de capa de aplicación ( ALPN ) es una extensión de seguridad de la capa de transporte (TLS) que permite a la capa de aplicación negociar qué protocolo debe ejecutarse a través de una conexión segura de manera que se eviten viajes de ida y vuelta adicionales y que sea independiente de los protocolos de la capa de aplicación. Se utiliza para establecer conexiones HTTP/2 sin viajes de ida y vuelta adicionales (el cliente y el servidor pueden comunicarse a través de puertos previamente asignados a HTTPS con HTTP/1.1 y actualizar para usar HTTP/2 o continuar con HTTP/1.1 sin cerrar la conexión inicial).
ALPN es compatible con estas bibliotecas:
En enero de 2010, Google presentó un borrador de estándar IETF que describe la extensión TLS de Next Protocol Negotiation. [13] Esta extensión se utilizó para negociar conexiones SPDY experimentales entre Google Chrome y algunos de los servidores de Google. A medida que SPDY evolucionó, NPN fue reemplazado por ALPN.
El 11 de julio de 2014, ALPN se publicó como RFC 7301. ALPN reemplaza la extensión Next Protocol Negotiation (NPN). [14]
El inicio falso de TLS se deshabilitó en Google Chrome a partir de la versión 20 (2012), excepto para los sitios web con la extensión NPN anterior. [15]
ALPN es una extensión TLS que se envía en el protocolo de enlace TLS inicial "Client Hello" y enumera los protocolos que admite el cliente (por ejemplo, el navegador web):
Tipo de protocolo de enlace : Cliente Hola ( 1 ) Longitud : 141 Versión : TLS 1.2 ( 0x0303 ) Aleatorio : dd67b5943e5efd0740519f38071008b59efbd68ab3114587 .. . ID de sesión Longitud : 0 Longitud de conjuntos de cifrados : 10 Conjuntos de cifrados ( 5 conjuntos ) Longitud de métodos de compresión : 1 Métodos de compresión ( 1 método ) Longitud de extensiones : 90 [ se omiten otras extensiones ] Extensión : application_layer_protocol_negotiation ( len = 14 ) Tipo : application_layer_protocol_negotiation ( 16 ) Longitud : 14 Longitud de extensión ALPN : 12 Protocolo ALPN Longitud de cadena ALPN : 2 Protocolo siguiente ALPN : h2 Longitud de cadena ALPN : 8 Protocolo siguiente ALPN : http / 1.1
El 'Server Hello' resultante del servidor web también contendrá la extensión ALPN y confirmará qué protocolo se utilizará para la solicitud HTTP:
Tipo de protocolo de enlace : Servidor Hola ( 2 ) Longitud : 94 Versión : TLS 1. 2 ( 0x0303 ) Aleatorio : 44 e447964d7e8a7d3b404c4748423f02345241dcc9c7e332 .. . ID de sesión Longitud : 32 ID de sesión : 7667476 d1d698d0a90caa1d9a449be814b89a0b52f470e2d .. . Conjunto de cifrados : TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ( 0xc02f ) Método de compresión : null ( 0 ) Longitud de extensiones : 22 [ se omiten otras extensiones ] Extensión : application_layer_protocol_negotiation ( len = 5 ) Tipo : application_layer_protocol_negotiation ( 16 ) Longitud : 5 Longitud de extensión ALPN : 3 Protocolo ALPN Longitud de cadena ALPN : 2 Protocolo siguiente ALPN : h2