Dans une section, nous avons analysé le processus de communication sécurisé du HTTPS et appris que HTTPS peut empêcher efficacement les attaques de l'homme du milieu. Mais quiconque a utilisé des outils de capture de paquets sait que Charles et Fiddler, par exemple, peuvent capturer les requêtes HTTPS et les déchiffrer. Comment font-ils ?
Tout d'abord, regardons la description du proxy HTTPS sur le site officiel de Charles : (apprentissage recommandé : web front- fin du tutoriel vidéo)
Charles agit comme un agent intermédiaire Lorsque le navigateur communique avec le serveur, Charles reçoit le certificat du serveur, mais génère dynamiquement un certificat et l'envoie au navigateur. c'est-à-dire que Charles agit comme un agent intermédiaire dans le navigateur et communique avec le serveur, afin que les données de communication puissent être interceptées et décryptées par Charles. Depuis que Charles a modifié le certificat, le navigateur émettra un avertissement de sécurité si la vérification échoue, et le certificat de Charles doit être installé avant que l'accès normal puisse être effectué.
Ce que Charles doit faire, c'est déguiser le serveur en client et le client en serveur :
Intercepter la requête HTTPS du vrai client et déguiser le client Le client envoie une requête HTTPS au vrai serveur
Accepte la réponse du vrai serveur, utilise le propre certificat de Charles pour déguiser le serveur et envoie le contenu des données au vrai client
Regardons le processus spécifique :
Le client initie une requête HTTPS au serveur
Charles intercepte la requête du client et se fait passer pour un client pour faire une requête au serveur
Le serveur envoie une requête au "client" (au-dessus se trouve Charles) Renvoi du certificat CA du serveur
Charles intercepte la réponse du serveur, obtient la clé publique du certificat du serveur, puis effectue une certificat lui-même, remplace le certificat du serveur et l'envoie au client. (Dans cette étape, Charles récupère la clé publique du certificat du serveur)
Après que le client ait reçu le certificat du "serveur" (en fait Charles), il génère une clé symétrique, la crypte avec la clé publique de Charles , et l'envoie Au "serveur" (Charles)
Charles intercepte la réponse du client, déchiffre la clé symétrique avec sa propre clé privée, puis la crypte avec la clé publique du certificat du serveur et l'envoie au serveur. (Dans cette étape, Charles obtient la clé symétrique)
Le serveur déchiffre la clé symétrique avec sa propre clé privée et envoie une réponse au "client" (Charles)
Charles intercepte le serveur réponse, Remplacez-le par votre propre certificat et envoyez-le au client
À ce stade, la connexion est établie. Charles a obtenu la clé publique du certificat du serveur et la clé symétrique négociée entre le client et le serveur. Ensuite, il peut décrypter ou modifier le message crypté.
Le principe de la capture de paquets HTTPS est assez simple. Pour faire simple, Charles, en tant qu'"agent intermédiaire", récupère la clé publique du certificat du serveur et la clé symétrique de la connexion HTTPS. Le principe est que le client choisit Trust et installe le certificat CA de Charles, sinon le client « alarmera » et mettra fin à la connexion. De ce point de vue, le HTTPS reste très sécurisé
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!