Terminez l'analyse des en-têtes CONNECT avant de relayer le flux client
Un serveur proxy qui relaie juste après la ligne de requête peut envoyer son propre en-tête Host au port TLS de la destination.
Après la ligne de requête CONNECT, ces octets appartiennent encore au proxy :
CONNECT service.example:443 HTTP/1.1\r\n
Host: service.example:443\r\n
User-Agent: example-client\r\n
\r\nRelayer Host ou User-Agent vers le port 443 fournit à la destination des en-têtes en clair là où elle attend TLS. Cette défaillance peut survenir avant même que le choix d'un chiffrement n'ait d'importance.
- Lisez et analysez jusqu'au terminateur d'en-têtes (ligne vide), dans un délai de configuration et une limite de taille d'en-têtes.
- Appliquez l'authentification du proxy et la politique de destination.
- Établissez la connexion cible approuvée.
- Envoyez la réponse CONNECT réussie et passez en mode tunnel.
Conservez les octets mis en tampon après la frontière pour l'état suivant approprié. Ne les jetez pas et ne traitez pas les en-têtes de requête du proxy comme la requête ultérieure du site.
Le client a une obligation symétrique côté réponse : terminer la lecture de la réponse CONNECT réussie avant de démarrer le protocole tunnelisé. Les deux extrémités doivent s'accorder sur la frontière où le flux change de rôle.