Le tunneling HTTP est utilisé pour créer un lien réseau entre deux ordinateurs dans des conditions de connectivité réseau restreintes, notamment en raison de pare-feu , de NAT et de listes de contrôle d'accès. Le tunnel est créé par un intermédiaire appelé serveur proxy , généralement situé dans une zone démilitarisée .
Le tunneling peut également permettre la communication à l'aide d'un protocole qui ne serait normalement pas pris en charge sur le réseau restreint.
Méthode HTTP CONNECT
La forme la plus courante de tunneling HTTP est la méthode HTTP CONNECT standardisée . Dans ce mécanisme, le client demande à un serveur proxy HTTP de transférer la connexion TCP vers la destination souhaitée. Le serveur procède ensuite à l'établissement de la connexion pour le compte du client. Une fois la connexion établie par le serveur, le serveur proxy continue de transmettre le flux TCP vers et depuis le client. Seule la demande de connexion initiale est HTTP - après cela, le serveur se contente de transmettre par proxy la connexion TCP établie.
Ce mécanisme permet à un client derrière un proxy HTTP d'accéder à des sites Web utilisant SSL ou TLS (c'est-à-dire HTTPS). Les serveurs proxy peuvent également limiter les connexions en autorisant uniquement les connexions au port HTTPS par défaut 443, en mettant sur liste blanche les hôtes ou en bloquant le trafic qui ne semble pas être SSL.
Exemple de négociation
Le client se connecte au serveur proxy et demande le tunneling en spécifiant le port et l'ordinateur hôte auquel il souhaite se connecter. Le port est utilisé pour indiquer le protocole demandé.
CONNECT streamline.t-mobile.com:22 HTTP / 1.1 Proxy-Authorization : Informations d'identification codées de base
Si la connexion a été autorisée et que le proxy s'est connecté à l'hôte spécifié, le proxy renverra une réponse de réussite 2XX.
HTTP / 1.1 200 OK
Le client est maintenant en communication avec l'hôte distant. Toutes les données envoyées au serveur proxy sont désormais transmises, sans modification, à l'hôte distant et le client peut communiquer en utilisant n'importe quel protocole accepté par l'hôte distant. Dans l'exemple ci-dessous, le client démarre les communications SSH, comme l'indique le numéro de port dans la requête CONNECT initiale.
SSH-2.0-OpenSSH_4.3 ...
Tunneling HTTP sans utiliser CONNECT
Un tunnel HTTP peut également être implémenté en utilisant uniquement les méthodes HTTP habituelles telles que POST, GET, PUT et DELETE. Cette approche est similaire à celle utilisée dans Bidirectionnel-streams Over Synchronous HTTP ( BOSH ).
Un serveur HTTP spécial fonctionne en dehors du réseau protégé et un programme client est exécuté sur un ordinateur à l'intérieur du réseau protégé. Chaque fois qu'un trafic réseau est transmis par le client, le client reconditionne les données de trafic sous forme de requête HTTP et relaie les données au serveur externe, qui extrait et exécute la requête réseau d'origine pour le client. La réponse à la requête, envoyée au serveur, est ensuite reconditionnée sous forme de réponse HTTP et retransmise au client. Étant donné que tout le trafic est encapsulé dans des requêtes et réponses GET et POST normales, cette approche fonctionne avec la plupart des proxys et des pare-feu.