
Concepts de base
HTTP(HyperText Transfer Protocol) est un protocole de la couche application utilisé pour les systèmes d'information distribués, collaboratifs et hypermédias. En termes simples, il s'agit d'une méthode de publication et de réception de pages HTML, utilisée pour transférer des informations entre les navigateurs Web et les serveurs Web.
HTTP fonctionne par défaut sur le port 80 du protocole TCP. Lorsque les utilisateurs visitent des sites Webhttp://avec le préfixe [http://], il s'agit de services HTTP standard.
Le protocole HTTP envoie le contenu en clair et ne fournit aucune forme de chiffrement des données. Si un attaquant intercepte les messages transmis entre un navigateur Web et un serveur Web, il peut directement lire les informations qu'ils contiennent. Par conséquent, le protocole HTTP ne convient pas à la transmission d'informations sensibles, telles que les numéros de carte de crédit, les mots de passe et autres informations de paiement.
HTTPS(Hypertext Transfer Protocol Secure) est un protocole de transport pour la communication sécurisée sur les réseaux informatiques. HTTPS communique via HTTP mais utilise SSL/TLS pour chiffrer les paquets de données. L'objectif principal du développement de HTTPS est de fournir une authentification d'identité pour les serveurs Web et de protéger la confidentialité et l'intégrité des données échangées.
HTTPS fonctionne par défaut sur le port 443 du protocole TCP. Son flux de travail est généralement le suivant :
- 1. Poignée de main de synchronisation TCP en trois étapes
- 2. Le client vérifie le certificat numérique du serveur
- 3. L'algorithme DH négocie la clé pour l'algorithme de chiffrement symétrique et la clé pour l'algorithme de hachage
- 4. La négociation du tunnel de chiffrement sécurisé SSL est terminée
- 5. La page web est transmise sous forme chiffrée, chiffrée avec l'algorithme de chiffrement symétrique et la clé négociés, garantissant la confidentialité des données ; l'algorithme de hachage négocié est utilisé pour la protection de l'intégrité des données, garantissant que les données ne sont pas altérées.
En juin 2018, 34.6% des 1 million de sites web les plus populaires du classement Alexa utilisaient HTTPS par défaut, 43.1% des 141,387 sites web les plus populaires d'Internet avaient mis en œuvre HTTPS de manière sécurisée, et 45% des chargements de page (enregistrés via Firefox) utilisaient HTTPS. En mars 2017, 0.11% du total des noms de domaine enregistrés en Chine utilisaient HTTPS.
Selon les statistiques de Mozilla, depuis janvier 2017, plus de la moitié du trafic des sites web est chiffré.
Différence entre HTTP et HTTPS
- HTTP transmet en clair, et les données ne sont pas chiffrées, donc la sécurité est faible. HTTPS (SSL+HTTP) chiffre le processus de transmission des données, donc la sécurité est meilleure.
- L'utilisation du protocole HTTPS nécessite de demander un certificat auprès d'une CA (autorité de certification). Il y a généralement peu de certificats gratuits, donc des frais sont nécessaires. Les autorités de certification incluent : Symantec, Comodo, GoDaddy, GlobalSign, etc.
- La vitesse de réponse des pages HTTP est plus rapide que celle de HTTPS, principalement parce que HTTP utilise une poignée de main TCP en trois temps pour établir une connexion, ce qui nécessite que le client et le serveur échangent 3 paquets, tandis que HTTPS, en plus des trois paquets TCP, nécessite également les 9 paquets nécessaires à la poignée de main SSL, soit un total de 12 paquets.
- HTTP et HTTPS utilisent des méthodes de connexion complètement différentes et des ports différents : le premier utilise 80, et le second utilise 443.
- HTTPS est en réalité le protocole HTTP construit au-dessus de SSL/TLS, donc HTTPS consomme plus de ressources serveur que HTTP.
Poignée de main TCP en trois temps
Dans le protocole TCP/IP, le protocole TCP établit une connexion fiable au moyen d'une poignée de main en trois temps.
- Première poignée de main : le client tente de se connecter au serveur et envoie un paquet SYN (Synchronize Sequence Numbers), syn=j. Le client entre dans l'état SYN_SEND et attend l'accusé de réception du serveur.
- Deuxième poignée de main : le serveur reçoit le paquet SYN du client et l'acquitte (ack=j+1), tout en envoyant aussi un paquet SYN (syn=k) au client, c'est-à-dire un paquet SYN+ACK. À ce stade, le serveur entre dans l'état SYN_RECV.
- Troisième poignée de main : le client reçoit le paquet SYN+ACK du serveur et envoie un paquet d'accusé de réception ACK (ack=k+1) au serveur. Une fois ce paquet envoyé, le client et le serveur entrent dans l'état ESTABLISHED, terminant ainsi la poignée de main en trois temps.
Simplifié :

Comment fonctionne HTTPS
Nous savons tous que HTTPS peut chiffrer les informations afin d'empêcher des tiers d'obtenir des informations sensibles ; c'est pourquoi de nombreux services à haute sécurité, comme les sites bancaires ou les services de messagerie, adoptent le protocole HTTPS.

1. Le client initie une requête HTTPS
Il n'y a pas grand-chose à dire ici : l'utilisateur saisit une URL HTTPS dans le navigateur, puis se connecte au port 443 du serveur.
2. Configuration côté serveur
Un serveur utilisant le protocole HTTPS doit posséder un certificat numérique, qui peut être auto-généré ou demandé auprès d'un organisme. La différence est qu'un certificat auto-émis nécessite que la vérification du client réussisse avant de pouvoir poursuivre l'accès, tandis qu'un certificat demandé auprès d'entreprises de confiance n'affichera pas de page d'avertissement (StartSSL est un bon choix, avec 1 an de service gratuit).
Ce certificat est en fait une paire composée d'une clé publique et d'une clé privée. Si vous ne comprenez pas bien les clés publiques et privées, imaginez une clé et un cadenas. Vous seul au monde possédez cette clé. Vous pouvez donner le cadenas à d'autres. Les autres peuvent utiliser le cadenas pour verrouiller des choses importantes, puis vous les envoyer. Comme vous seul avez la clé, vous seul pouvez voir les choses verrouillées par ce cadenas.
3. Transmettre le certificat
Ce certificat est en fait la clé publique, mais il contient beaucoup d'informations, telles que l'autorité de délivrance du certificat, la date d'expiration, etc.
4. Le client analyse le certificat
Cette partie du travail est effectuée par le TLS du client. D'abord, il vérifie si la clé publique est valide, par exemple l'autorité de délivrance, la date d'expiration, etc. Si une anomalie est détectée, une fenêtre d'avertissement s'affiche pour indiquer qu'il y a un problème avec le certificat.
Si le certificat ne pose aucun problème, une valeur aléatoire est générée, puis le certificat est utilisé pour chiffrer cette valeur aléatoire, comme indiqué ci-dessus : verrouiller la valeur aléatoire avec un cadenas, de sorte que, à moins de posséder la clé, vous ne pouvez pas voir le contenu verrouillé.
5. Transmettre les informations chiffrées
Ce qui est transmis ici est la valeur aléatoire chiffrée avec le certificat. Le but est de permettre au serveur d'obtenir cette valeur aléatoire, afin que les communications futures entre le client et le serveur puissent être chiffrées et déchiffrées à l'aide de cette valeur aléatoire.
6. Le serveur déchiffre les informations
Après que le serveur a déchiffré avec la clé privée, il obtient la valeur aléatoire (clé symétrique) envoyée par le client, puis chiffre symétriquement le contenu avec cette valeur. Ce que l'on appelle le chiffrement symétrique consiste à mélanger les informations et la clé privée au moyen d'un algorithme, de sorte que, à moins de connaître la clé privée, vous ne pouvez pas obtenir le contenu. Et comme le client et le serveur connaissent tous deux cette clé privée, tant que l'algorithme de chiffrement est suffisamment robuste et que la clé privée est suffisamment complexe, les données sont suffisamment sécurisées.
7. Transmettre les informations chiffrées
Cette partie des informations est chiffrée par le serveur avec la clé privée et peut être restaurée côté client.
8. Le client déchiffre les informations
Le client utilise la clé privée générée précédemment pour déchiffrer les informations envoyées par le côté serveur, obtenant ainsi le contenu déchiffré. Tout au long du processus, même si un tiers intercepte les données, il ne peut rien y faire.