1 votes

J'ai besoin d'une explication au niveau du paquet de données sur la manière dont HTTP redirige vers HTTPS

Je programme un serveur web embarqué et j'essaie de comprendre comment rediriger tous les paquets SYN entrants sur le port 80 vers le port 443. Tout ce que j'ai trouvé en ligne est dans le contexte d'Apache, NGIX, etc..., et rien de cela ne s'applique à ce sur quoi je travaille.

Éditer :

Voici ce que je comprends du processus jusqu'à présent :

  1. Le navigateur lance le processus de connexion TCP en 3 étapes sur le port 80, supposons que cela réussisse.
  2. Sur réception de la première demande HTTP GET, le serveur devrait renvoyer un 301 Moved Permanently (ou 308 Permanent Redirect?) au navigateur. * Le navigateur devrait alors lancer le processus de négociation TLS sur le port 443

`

Pour information, c'est un appareil sur un réseau local sans accès à Internet.

`

3voto

Steffen Ullrich Points 11972
  1. Le navigateur initie le handshake TCP en port 80, supposons que cela réussisse.

correct.

  1. Après avoir reçu la première requête HTTP GET, le serveur doit renvoyer une redirection permanente 301 (ou 308 Redirection Permanente?) vers le navigateur.

Généralement un 301. Cela suffit pour une requête GET. Les paquets réels sur le fil n'ont pas d'importance: TCP concerne un flux d'octets et la façon dont ce flux d'octets est fragmenté en paquets est sans importance pour la fonctionnalité.

  1. Le navigateur doit ensuite initier le handshake TLS sur le port 443

Avant que le navigateur puisse effectuer le handshake TLS sur le port 443, il doit créer une connexion TCP sur le port 443, similaire à ce qu'il a fait à l'étape 1 avec le port 80.

Et encore une fois, la fragmentation réelle du handshake TLS n'a pas d'importance car TCP concerne un flux d'octets. Pour savoir comment fonctionne le handshake TLS en termes de données transférées, consultez par exemple Ce qui se passe lors d'un handshake TLS? | Handshake SSL.

Après que le handshake TLS soit terminé, le navigateur envoie la requête GET, mais via la connexion TLS et donc chiffrée.

1voto

Tero Kilkanen Points 32968

Je programme un serveur web embarqué et j'essaie de comprendre comment rediriger tous les paquets SYN entrants sur le port 80 pour les rediriger vers le port 443. Tout ce que j'ai trouvé en ligne concerne Apache, NGINX, etc., et rien de tout cela ne s'applique à ce sur quoi je travaille.

Il s'agit de deux couches différentes sur la pile réseau : les paquets SYN font partie de l'échange TCP, qui est utilisé pour former un canal de communication bidirectionnel entre le client et le serveur web. Sur cette connexion TCP, le protocole HTTP est utilisé pour effectuer des requêtes et envoyer des réponses.

Sans contexte plus précis, il est difficile de savoir si vous utilisez une pile TCP existante, ou si vous implémentez également TCP.

Si vous utilisez une pile TCP existante, je vous recommande d'utiliser Libevent pour fonctionner en tant que serveur HTTP. Un exemple se trouve à : https://github.com/libevent/libevent/blob/master/sample/http-server.c

Ensuite, vous pouvez ajouter un peu de logique pour gérer la logique de demande / réponse que vous souhaitez.

-1voto

Jiju John Points 141

Ma suggestion serait d'installer un petit serveur web nginx et de capturer le réseau avec un outil comme wireshark et de faire quelques captures pour voir ce qui se passe.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X