Application-Layer Protocol Negotiation (ALPN) est une extension du protocole Transport Layer Security (TLS) permettant la négociation du protocole de la couche applicative lors de la poignée de mains TLS. Par exemple, si plusieurs applications sont supportées sur un même port TCP ou UDP, cette extension permet à la couche application de négocier quel protocole sera utilisé lors de la poignée de main TLS.
Cette extension est basé sur le protocole Next Protocol Negotiation (NPN) mis au point par Google dans le cadre du développement du protocole SPDY.
La standardisation de ces travaux par l'IETF a conduit au remplacement de NPN par ALPN par la publication de la RFC 7301[1] le .
Cette extension notamment est utilisée par l'ensemble des navigateurs web supportant le protocole HTTP/2.
La négociation est effectuée lors de la poignée de main TLS, qui s'effectue de la manière suivante:
L'intégration de l'extension dans la poignée de main TLS évite les échanges additionnels de paquets. Le support n'implique donc pas de délais supplémentaires lors de l'établissement du canal de communication.
À noter également que, comme pour toutes les extensions TLS, les protocoles supportés par le client et le serveur sont échangés en clair sur le réseau.
L'extension ALPN est prise en charge par ces bibliothèques: