SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark

Analysez SNI vs ALPN dans les poignées de main TLS. Diagnostiquez l'échec de la négociation HTTP/2, le repli h2 vs http/1.1, les extensions ClientHello, les réponses ServerHello ALPN et les problèmes de terminaison de proxy dans les PCAP Wireshark.

tls alpn, http2 negotiation, clienthello, serverhello, h2, http/1.1 fallback, analyse pcap

De nombreux incidents « HTTP/2 ne fonctionne pas » sont en réalité des problèmes de négociation TLS ALPN. Les utilisateurs recherchent "TLS ALPN pcap", "HTTP2 repli vers HTTP/1.1", "ALPN h2 non négocié", "ClientHello ALPN extension", "ServerHello selected protocol" et "pourquoi mon navigateur utilise-t-il HTTP/1.1" alors qu'un point de terminaison devrait prendre en charge HTTP/2 mais que le trafic diminue.

La chirurgie PCAP est utile car les preuves ALPN résident dans la poignée de main TLS. Si la capture inclut ClientHello et ServerHello, vous pouvez souvent prouver si le client a proposé « h2 », si le serveur l'a sélectionné, si un proxy a mis fin à TLS ou si la connexion n'a jamais eu la possibilité de négocier HTTP/2.

Ce que fait ALPN

ALPN signifie négociation de protocole de couche application. Il permet au client et au serveur de se mettre d'accord sur un protocole d'application lors de la configuration de TLS.

Valeurs ALPN courantes :

  • h2 pour HTTP/2 sur TLS.
  • http/1.1 pour HTTP/1.1.
  • Autres identifiants de protocole pour les systèmes spécialisés.

Si le client ne propose pas « h2 », le serveur ne peut pas le sélectionner. Si le serveur ne sélectionne pas « h2 », la connexion n'utilisera pas HTTP/2 même si le serveur prend en charge HTTP/2 ailleurs.

Symptômes courants

Les échecs ALPN apparaissent comme :

  • Le navigateur utilise HTTP/1.1 au lieu de HTTP/2.
  • La connexion gRPC échoue.
  • CDN fonctionne mais pas Origin.
  • Protocole de rétrogradation du proxy inverse.
  • L'équilibreur de charge met fin à TLS et transmet HTTP/1.1.
  • L'application mobile indique une erreur de protocole.
  • Les métriques du serveur ne montrent aucun trafic h2.
  • HTTP/2 fonctionne avec un nom d'hôte mais pas avec un autre.

Ces symptômes sont souvent débogués au niveau de la couche HTTP, mais la réponse peut résider dans la négociation TLS.

ClientBonjour preuve

Le ClientHello peut montrer si le client a proposé ALPN et quels protocoles il a annoncés.

Questions utiles :

  • L'extension ALPN est-elle présente ?
  • L'offre inclut-elle « h2 » ?
  • Inclut-il également « http/1.1 » ?
  • Le SNI est-il présent et correct ?
  • Quelle version TLS est proposée ?
  • La capture est-elle effectuée avant qu'un proxy ne mette fin à TLS ?

Si h2 est absent de ClientHello, le serveur ne peut pas choisir HTTP/2. La raison peut être la configuration de la bibliothèque cliente, une ancienne pile TLS, une option HTTP/2 désactivée ou un client proxy qui ouvre une nouvelle connexion en amont.

ServeurBonjour la preuve

Le côté serveur doit sélectionner un protocole dans la liste ALPN du client.

Problèmes :

  • Le serveur sélectionne uniquement « http/1.1 ».
  • Le serveur omet la réponse ALPN.
  • La négociation du serveur échoue avant la sélection ALPN.
  • Les incompatibilités de certificat ou de SNI sont acheminées vers un hôte virtuel par défaut.
  • Le terminateur TLS prend en charge h2 du côté public mais pas du côté amont.

La preuve par paquets peut séparer la prise en charge du serveur du comportement de routage et de proxy.

SNI et ALPN ensemble

SNI et ALPN sont souvent connectés. Le nom d'hôte sélectionné par SNI peut déterminer quels paramètres de certificat, d'hôte virtuel et de protocole s'appliquent.

Exemple d'échec :

  • Le client propose « h2 ».
  • Le client envoie un mauvais SNI.
  • Le serveur renvoie le certificat par défaut.
  • L'hôte virtuel par défaut n'active pas HTTP/2.
  • La connexion revient à « http/1.1 ».

Dans ce cas, le problème n'est pas "HTTP/2 cassé globalement". Il s'agit du routage du nom d'hôte.

Terminaison du proxy et de l'équilibreur de charge

Les déploiements modernes divisent souvent TLS :

client -> CDN or load balancer -> reverse proxy -> origin

Each segment may have different ALPN behavior. The public side may negotiate HTTP/2 while the upstream side uses HTTP/1.1. Or the reverse proxy may accept h2 from clients but downgrade to HTTP/1.1 when talking to the application.

When analyzing a pcap, identify which segment you captured. A trace on the origin server may not show the public client handshake at all.

gRPC and ALPN

gRPC usually requires HTTP/2. If ALPN does not negotiate h2, gRPC clients may fail with protocol errors, unavailable errors, or connection reset messages.

For gRPC troubleshooting, preserve:

  • DNS answer.
  • TCP handshake.
  • TLS ClientHello.
  • TLS ServerHello.
  • ALPN protocol selected.
  • Any TLS alert.
  • First HTTP/2 frames if decrypted or visible through logs.

Even without decrypting payload, ALPN can prove whether HTTP/2 was negotiated.

Fallback is not always failure

HTTP clients may intentionally fall back to HTTP/1.1 when:

  • Server does not advertise h2.
  • Client policy disables HTTP/2.
  • TLS version or cipher constraints are incompatible.
  • Proxy strips or terminates the connection.
  • ALPN extension is missing.
  • A middlebox interferes with handshake.

The diagnostic question is whether fallback was expected for that route.

Debug checklist

Use this workflow:

  1. Capture from TCP handshake through TLS handshake.
  2. Confirm SNI hostname.
  3. Check ClientHello ALPN list.
  4. Confirm whether h2 is offered.
  5. Check ServerHello selected ALPN.
  6. Compare certificate with SNI.
  7. Identify CDN, proxy, or load balancer termination.
  8. Compare public-side and origin-side captures if needed.
  9. Check whether the client library enables HTTP/2.
  10. Preserve the handshake when trimming the pcap.

Final diagnosis

TLS ALPN and HTTP/2 issues should be diagnosed from handshake evidence. The key facts are whether the client offered h2, whether the server selected it, whether SNI routed to the right virtual host, and whether a proxy changed protocol between network segments.

PCAP Surgery helps keep the exact handshake packets needed to prove HTTP/2 negotiation, fallback, or proxy termination behavior.

<!-- pcap-localized-evidence-foundation-v1:start -->

Réponse fondée sur les paquets pour « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark »

La réponse directe est qu’un label d’analyse ou un message applicatif ne suffit pas à désigner la cause. Commencez par le point de capture et la direction, puis prouvez la dernière frontière réussie et la première en échec. Pour « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark », un autre lecteur doit retrouver le packet, le trou ou l’intervalle soutenant chaque phrase et savoir quel élément pourrait la réfuter.

Placer la capture sur le chemin

Consignez client, serveur et tout proxy, load balancer, NAT ou firewall. Indiquez interface, lieu, horloge, système et directions visibles. Une capture côté client prouve ce qui y arrive, pas que le serveur n’a rien envoyé. Côté serveur, elle prouve la sortie à cet endroit, pas le trajet. Avant de comparer deux points, corrigez clock offset et alignez flow tuple, TCP sequence ou transaction ID.

Vérifiez snap length, dropped packets, offload, capture filter, ring buffer et heure de départ. Un mauvais checksum sur l’hôte peut être un offload artifact. Un grand segment peut venir de GRO/TSO sans exister ainsi sur le fil. Un packet absent d’un fichier limité n’est pas une network loss tant que le point devait réellement le voir.

Lire les frontières dans l’ordre

Frontière Preuve de réussite Preuve d’échec utile
Link et IP direction, adresses et route cohérentes ARP/NDP absent, ICMP, MTU, asymétrie
TCP SYN, SYN-ACK, ACK et sequence retransmission, RST, zero window, timeout
TLS ClientHello, ServerHello et progression alert ou frontière SNI/ALPN/certificate
Application request complet et réponse associée status, trou ou fermeture précoce
Usage response time ou failure window blocage lié à une frontière

Arrêtez-vous à la première frontière sans réussite. Si TCP n’est pas établi, ne commencez pas par HTTP. Si le request atteint le proxy mais pas l’upstream, la limite se situe dans le proxy ou son chemin. S’il atteint l’upstream sans response avant timeout, ACK et progression des bytes séparent application delay et network loss.

Séparer observation et hypothèse

Une observation est pointable : « Le client a envoyé jusqu’à une sequence, l’émetteur a répété un segment trois fois et aucun ACK progressif n’apparaît ici. » L’hypothèse est : « le chemin a perdu le segment ». Une autre capture ou des dropped records peuvent la réfuter. Pour chaque hypothèse, écrivez une preuve favorable et une preuve contraire.

Retransmission ou duplicate ACK ne désigne pas le responsable. Reordering, loss, capture artifact et receiver delay peuvent produire des labels proches. Reliez direction, sequence, ACK, SACK, RTT, window et temps applicatif. Pour DNS/DHCP, associez transaction ID, adresses et essais ; pour HTTP, request et response ; pour TLS, direction du handshake.

Préserver l’original

Calculez le checksum et gardez l’original inchangé. Filtrez, coupez et masquez une working copy. Journalisez input, transformation, heure, packet count avant/après, checksum résultat et motif. Après timestamp rewrite ou suppression de packets, cette copie ne convient plus à certaines mesures de temps ou de séquence.

Remplacez adresses et identifiants de façon stable pour suivre le même endpoint. Ne retirez pas ports, directions ou longueurs nécessaires. Gardez la table secrète séparée. Consultez les limites de capture et d’export et le parcours PCAP Surgery.

QA avant publication

Titre et réponse traitent-ils le même flow ? Chaque durée cite-t-elle horloge et points ? La première frontière défaillante est-elle claire ? Une alternative est-elle testée ? Une seule variable change-t-elle ? L’original subsiste-t-il ? Limitez la conclusion : « Cette capture prouve le comportement côté client pendant cet intervalle, pas l’exécution interne du serveur. »

Le terme Semrush validé PCAP analyzer reste la propriété exclusive du produit. Cet article ne revendique ni volume ni KD non mesurés.

<!-- pcap-localized-evidence-foundation-v1:end --><!-- multilingual-blog-closeout:start -->

Réponse directe et limite d’acceptation

La réponse courte à « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark » est la suivante : Analysez SNI vs ALPN dans les poignées de main TLS. Diagnostiquez l'échec de la négociation HTTP/2, le repli h2 vs http/1.1, les extensions ClientHello, les réponses ServerHello ALPN et les problèmes de terminaison de proxy dans les PCAP Wireshark. Considérez cette phrase comme un résultat à vérifier, et non comme une promesse valable pour toute entrée, tout appareil, tout projet ou tout environnement. Un résultat complet consigne l’état initial, l’action exacte, la sortie visible et la condition qui prouve la fin de la tâche dans PCAP Surgery.

Procédure fondée sur les preuves

Commencez par un cas petit et répétable avant de modifier un projet complet. Notez version de l’application, système, identité de l’entrée ou de l’appareil, réglages pertinents et résultat attendu. Exécutez une action volontaire, conservez la première transition inattendue et comparez-la à un cas nominal si possible. Plusieurs changements simultanés masquent la condition qui a créé ou corrigé le problème.

Point de contrôle 1 : SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshar

Transformez « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 2 : Analysez SNI vs ALPN dans les poignées de main TLS. Diagnostiquez l'échec de la négociatio

Traitez « Analysez SNI vs ALPN dans les poignées de main TLS. Diagnostiquez l'échec de la négociation HTTP/2, le repli h2 vs http/1.1, les extensions ClientHell » comme une porte d’acceptation distincte pour « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Point de contrôle 3 : Ce que fait ALPN

Transformez « Ce que fait ALPN » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 4 : Symptômes courants

Traitez « Symptômes courants » comme une porte d’acceptation distincte pour « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Point de contrôle 5 : ClientBonjour preuve

Transformez « ClientBonjour preuve » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 6 : ServeurBonjour la preuve

Traitez « ServeurBonjour la preuve » comme une porte d’acceptation distincte pour « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Point de contrôle 7 : SNI et ALPN ensemble

Transformez « SNI et ALPN ensemble » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 8 : Terminaison du proxy et de l'équilibreur de charge

Traitez « Terminaison du proxy et de l'équilibreur de charge » comme une porte d’acceptation distincte pour « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Point de contrôle 9 : gRPC and ALPN

Transformez « gRPC and ALPN » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 10 : Fallback is not always failure

Traitez « Fallback is not always failure » comme une porte d’acceptation distincte pour « SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Matrice d’acceptation

Point Preuve à conserver Critère de réussite
SNI vs ALPN : analyse de prise de contact TLS et négociation HTTP/2 dans les PCAP Wireshark État initial, une action et état obtenu Une seconde personne reproduit le résultat
Analysez SNI vs ALPN dans les poignées de main TLS. Diagnostiquez l'échec de la négociation HTTP/2, le repli h2 vs http/ État initial, une action et état obtenu Une seconde personne reproduit le résultat
Ce que fait ALPN État initial, une action et état obtenu Une seconde personne reproduit le résultat
Symptômes courants État initial, une action et état obtenu Une seconde personne reproduit le résultat
ClientBonjour preuve État initial, une action et état obtenu Une seconde personne reproduit le résultat
ServeurBonjour la preuve État initial, une action et état obtenu Une seconde personne reproduit le résultat

Isolation, reprise et transmission

Arrêtez-vous à la première limite en échec. Conservez source, projet, session ou capture, dupliquez avant toute modification destructive et changez une variable par essai. Rejouer un flux entier après plusieurs changements peut modifier le résultat sans expliquer pourquoi.

Distinguez absence de preuve et preuve d’absence. Une vue vide peut signaler mauvaise entrée, portée, filtre, permission, appareil, période ou état du projet. Vérifiez acquisition ou import avant d’interpréter décodeur, éditeur, rapport ou export.

Avant transmission, rouvrez l’artefact durable et inspectez début, point de décision et fin. Notez version, plateforme, configuration, attente, observation et reproduction minimale. Retirez ou masquez les données sensibles et confirmez l’autorisation du destinataire.

Questions et réponses

Quelle est la manière fiable la plus rapide de commencer ?

Utilisez le plus petit cas représentatif, écrivez le résultat attendu et ne changez qu’une variable. Validez le parcours de base avant d’ajouter filtres, effets, modifications, automatisation ou grande source.

Quelles preuves faut-il conserver ?

Gardez identité de l’entrée, version, plateforme, réglages, action exacte, première transition inattendue et sortie finale. Fermez puis rouvrez projet, session, rapport ou export avant de le considérer durable.

Quand faut-il répéter la procédure ?

Répétez-la après un changement pertinent d’application, système, pilote, firmware, modèle, source ou processus. Conservez le cas accepté précédent comme référence non modifiée.

Quand le résultat est-il transmissible ?

Lorsqu’une seconde personne autorisée identifie l’entrée, répète l’action, obtient le même résultat, comprend les limites et ouvre l’artefact sans état local non documenté.

Guides associés

Ces pages dans la même langue couvrent les étapes voisines sans changer le propriétaire canonique du sujet :

<!-- multilingual-blog-closeout:end -->