Application-Layer Protocol Negotiation

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ée 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 11 juillet 2014.

Cette extension notamment est utilisée par l'ensemble des navigateurs web supportant le protocole HTTP/2.

## Fonctionnement

[modifier | modifier le code]

La négociation est effectuée lors de la poignée de main TLS, qui s'effectue de la manière suivante:

1. Le client envoie un paquet "ClientHello" indiquant au serveur:
1. Le support de l'extension ALPN
2. Les protocoles supportés ("http/1.1", "h2" par exemple).
2. Le serveur répond avec un paquet "ServerHello" étendu, indiquant au client:
1. Le support de l'extension ALPN
2. Le protocole applicatif sélectionné
3. Les autres informations nécessaires au chiffrement du canal de communication: certificat, suite cryptographique et termine sa communication par l'envoi d'un paquet "ServerHelloDone".
3. Le client répond par l'envoi de son certificat ainsi que la suite cryptographique préférée et termine sa communication par l'envoi d'un paquet "Finished".
4. Le serveur confirme la sélection de la suite cryptographique demandée par le client et termine sa communication par l'envoi d'un paquet "Finished".

## Avantages et sécurité

[modifier | modifier le code]

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.

## Support

[modifier | modifier le code]

L'extension ALPN est prise en charge par ces bibliothèques:

* GnuTLS depuis la version 3.2.0, publié en mai 2013[2].
* MatrixSSL depuis la version 3.7.1 publié en décembre 2014[3].
* Network Security Services (NSS) depuis la version 3.15.5 publié en avril 2014[4].
* OpenSSL depuis la version 1.0.2, publié en janvier 2015[5].
* LibreSSL depuis la version 2.1.3 publié en janvier 2015[6].
* mbed TLS (anciennement PolarSSL) depuis la version 1.3.6, publié en avril 2014[7].
* Security Support Provider Interface (SSPI) depuis Windows 8.1 / Windows Server 2012 R2.
* s2n, depuis sa première publication en juin 2015.
* wolfSSL (anciennement CyaSSL) depuis la version 3.7.0 publié en octobre 2015[8].

## Notes et références

[modifier | modifier le code]

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Application-Layer Protocol Negotiation » (voir la liste des auteurs).

1. ↑ (en) Request for comments no 7301
2. ↑ (en) « gnutls 3.2.0 » (consulté le 16 juillet 2016)
3. ↑ (en) « MatrixSSL - News », 4 décembre 2014 (consulté le 16 juillet 2016)
4. ↑ (en) « NSS 3.15.5 release notes », Mozilla Developer Network, Mozilla (consulté le 16 juillet 2016)
5. ↑ (en) « OpenSSL 1.0.2 release notes », The OpenSSL Project, The OpenSSL Project, 22 janvier 2015 (consulté le 16 juillet 2016)
6. ↑ (en) « LibreSSL 2.1.3 released », 22 janvier 2015 (consulté le 16 juillet 2016)
7. ↑ (en) « Download overview - PolarSSL », 11 avril 2014 (consulté le 16 juillet 2016)
8. ↑ (en) « wolfSSL Release Change Log », 26 octobre 2015 (consulté le 16 juillet 2016)

## Liens externes

[modifier | modifier le code]

* draft-agl-tls-nextprotoneg-04 (brouillon NPN) (dernière mise à jour: 31 octobre 2012)
* RFC 7301[1] "Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension"

v · m

Logiciel de cryptographie

Clients de messagerie |

* Caliopen
* Claws Mail
* Enigmail
* GNU Privacy Guard
* GPGTools
* Gpg4win
* Kontact
* Mail (Apple)
* Microsoft Outlook
* Mozilla Thunderbird
* Olvid
* Pretty Good Privacy
* Pretty Easy privacy
* Sylpheed
* Keybase

Communication sécurisée |  | Off-the-Record Messaging |

* Adium
* BitlBee
* Centericq
* climm
* Cryptocat
* Jitsi
* Kopete
* MCabber
* Silence
* TextSecure
* Pidgin
* Profanity (en)
* Guardian Project

|

Secure Shell |

* ConnectBot (en)
* Dropbear
* FileZilla (seulement sftp)
* libssh / libssh2
* lsh (en)
* OpenSSH
* PuTTY
* SecureCRT (en)
* sshfs
* WinSCP

Transport Layer Security |

* Bouncy Castle (en)
* BoringSSL (en)
* Botan (en)
* cryptlib (en)
* GnuTLS
* Java Secure Socket Extension
* LibreSSL
* MatrixSSL
* Network Security Services (en)
* OpenSSL
* Mbed TLS
* RSA BSAFE (en)
* SChannel
* SSLeay (en)
* stunnel
* wolfSSL
* Application-Layer Protocol Negotiation

Réseau privé virtuel (VPN) |

* FireWall-1
* Cjdns
* Hamachi
* Openswan (en)
* OpenVPN
* SoftEther VPN (en)
* strongSwan (en)
* WireGuard

ZRTP |

* Signal
* Jitsi
* Linphone
* CSipSimple (en)

Pair-à-pair |

* Bitmessage
* RetroShare
* I2P-Bote
* Syndie

Chiffrement de disque |

* BitLocker Drive Encryption
* FreeOTFE
* TrueCrypt
* Historique des versions de TrueCrypt (en)
* BestCrypt
* CipherShed (en)
* CrossCrypt (en)
* Cryptoloop (en)
* DiskCryptor (en)
* dm-crypt
* LUKS
* DriveSentry (en)
* E4M (en)
* eCryptfs (en)
* FileVault
* GBDE (en)
* Geli
* PGPDisk (en)
* Private Disk (en)
* Scramdisk (en)
* Sentry 2020 (en)
* VeraCrypt

Anonymat sur Internet |

* I2P
* Java Anon Proxy
* Tor
* Riffle
* Vidalia
* OpenKeychain
* Cryptomator

Systèmes de fichiers chiffrés (en) distribué |

* Hyphanet
* Tahoe-LAFS (en)

Éducatif |

* CrypTool

Stéganographie |

* OutGuess

Articles liés |

* Outline of cryptography (en)
* Histoire de la cryptologie
* Fonction de hachage
* Fonction de hachage cryptographique
* Liste de fonctions de hachage
* S/MIME
* PGP/MIME
* PGP/Inline
* Triangle de Zooko

* Portail d’Internet

1. ↑ (en) Request for comments no 7301

*[RFC]: Request for comments
*[(en)]: Langue : anglais
*[no]: numéro
*[v]: Voir ce modèle.
*[m]: Modifier ce modèle. Merci de prévisualiser avant de sauvegarder.