Maison  >  Article  >  Tutoriel système  >  Explication détaillée du processus de connexion HTTPS, de l'attaque et du détournement de l'homme du milieu

Explication détaillée du processus de connexion HTTPS, de l'attaque et du détournement de l'homme du milieu

PHPz
PHPzoriginal
2024-06-16 10:52:26291parcourir
1. Processus de connexion HTTPS et principe d'attaque de l'homme du milieu

Le protocole https est le protocole http+ssl. Le processus de connexion est illustré dans la figure ci-dessous :
Explication détaillée du processus de connexion HTTPS, de lattaque et du détournement de lhomme du milieu

1.demande https

Le client envoie une requête https au serveur ;

2. Générez des clés publiques et privées

Après avoir reçu la demande, le serveur génère la clé publique et la clé privée. La clé publique équivaut à un verrou, et la clé privée est équivalente à une clé. Seule la clé privée peut ouvrir le contenu verrouillé par la clé publique ;

3. Renvoyez la clé publique
Le serveur renvoie la clé publique (certificat) au client. La clé publique contient de nombreuses informations, telles que l'autorité émettrice du certificat, l'heure d'expiration, etc.

4. Clé publique de vérification du client Une fois que le client a reçu la clé publique, il vérifiera d'abord si elle est valide, comme l'autorité émettrice ou le délai d'expiration, etc. Si un problème est détecté, une exception sera levée, indiquant qu'il y a un problème avec le certificat . S'il n'y a pas de problème, générez une valeur aléatoire comme clé du client, puis chiffrez-la avec la clé publique du serveur
 ;

5.Envoyer la clé client Le client chiffre la clé avec la clé publique du serveur puis l'envoie au serveur.

6. Le serveur reçoit la clé et chiffre symétriquement le contenu Le serveur reçoit la clé cryptée, puis la déchiffre avec la clé privée pour obtenir la clé du client. Ensuite, le serveur crypte symétriquement le contenu à transmettre et la clé du client, de sorte qu'à moins que la clé ne soit connue, il ne peut pas savoir ce qui se passe. transmis.

7. Transmission cryptée Le serveur transmet le contenu crypté au client.

8. Obtenez du contenu crypté et décryptez-le Une fois que le client a obtenu le contenu crypté, il utilise la clé générée précédemment pour le déchiffrer et obtient le contenu.

Attaque de détournement d'homme du milieu
https n'est pas absolument sûr. Comme le montre la figure ci-dessous, il s'agit d'une attaque de détournement de l'homme du milieu. L'homme du milieu peut obtenir tout le contenu de la communication entre le client et le serveur.


Explication détaillée du processus de connexion HTTPS, de lattaque et du détournement de lhomme du milieuL'intermédiaire intercepte la requête envoyée par le client au serveur, puis prétend être le client pour communiquer avec le serveur ; envoie le contenu renvoyé par le serveur au client, et prétend être le serveur avec lequel communiquer le client.

De cette manière, tout le contenu de la communication entre le client et le serveur peut être obtenu.

Pour utiliser une attaque de l'homme du milieu, le client doit faire confiance au certificat de l'intermédiaire. Si le client ne lui fait pas confiance, cette méthode d'attaque ne fonctionnera pas.

2. Prévention des attaques de l'homme du milieu

La raison du détournement de l'homme du milieu est que le certificat du serveur et le nom de domaine ne sont pas vérifiés ou que la vérification est incomplète. Pour plus de commodité, la méthode de vérification par défaut du framework open source est directement utilisée pour les requêtes https

.

Comme volley

Explication détaillée du processus de connexion HTTPS, de lattaque et du détournement de lhomme du milieu

Explication détaillée du processus de connexion HTTPS, de lattaque et du détournement de lhomme du milieu

OKhttp3.0

Explication détaillée du processus de connexion HTTPS, de lattaque et du détournement de lhomme du milieu

Méthodes de prévention :

Il existe deux méthodes de prévention

1. Pour les applications ayant des exigences de sécurité relativement élevées, le certificat peut être verrouillé en pré-intégrant le certificat côté client. La communication n'est autorisée que lorsque le certificat client et le certificat serveur sont totalement cohérents, comme certaines applications bancaires. , cette méthode est confrontée à un problème, le problème d'expiration du certificat. Étant donné que le certificat a une certaine période de validité, lorsque le certificat pré-intégré expire, il ne peut être résolu qu'en forçant la mise à jour ou en demandant à l'utilisateur de télécharger le certificat.

Prenons l'exemple de volley : la vérification est mise en œuvre comme suit

Créez SSLSocketFactory via un certificat pré-intégré ;

private static SSLSocketFactory buildSSLSocketFactory(Context context,
                                                      int certRawResId) {
    KeyStore keyStore = null;
    try {
        keyStore = buildKeyStore(context, certRawResId);
    } catch (KeyStoreException e) {
        e.printStackTrace();
    } catch (CertificateException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
    TrustManagerFactory tmf = null;
    try {
        tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    }

    SSLContext sslContext = null;
    try {
        sslContext = SSLContext.getInstance("TLS");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    try {
        sslContext.init(null, tmf.getTrustManagers(), null);
    } catch (KeyManagementException e) {
        e.printStackTrace();
    }

    return sslContext.getSocketFactory();

Générer une connexion vérifiée par SSL et nom de domaine
Explication détaillée du processus de connexion HTTPS, de lattaque et du détournement de lhomme du milieu

Explication détaillée du processus de connexion HTTPS, de lattaque et du détournement de lhomme du milieu

2 Pour les applications ayant des exigences de sécurité générales, vous pouvez vérifier le nom de domaine, la validité du certificat, les informations sur la clé du certificat et la chaîne de certificat

Prenons Volley comme exemple, réécrivez la méthode checkServerTrusted dans HTTPSTrustManager et activez une vérification forte du nom de domaine

Trois sécurité HTTPS pour Webview

De nombreuses applications utilisent actuellement webview pour charger les pages H5. Si le serveur utilise un certificat émis par une autorité de certification de confiance, surchargez onReceivedSslError() lorsque webView.setWebViewClient(webviewClient) Si une erreur de certificat se produit, appelez directement handler.proceed (). ignorera l'erreur et continuera à charger la page avec le problème de certificat. Si handler.cancel() est appelé, il peut mettre fin au chargement de la page avec le problème de certificat. S'il y a un problème avec le certificat, l'utilisateur peut être. est invité à indiquer les risques et laisse l'utilisateur choisir de charger ou non. Si la sécurité est requise Le niveau est relativement élevé et le chargement de la page peut être interrompu directement, invitant l'utilisateur que l'environnement réseau est risqué :

Explication détaillée du processus de connexion HTTPS, de lattaque et du détournement de lhomme du milieu

Il n'est pas recommandé d'utiliser directement handler.proceed(). Si la vue Web doit vérifier fortement le certificat du serveur lors du chargement de https, vous pouvez utiliser HttpsURLConnection pour vérifier fortement le certificat dans onPageStarted() afin de vérifier le certificat du serveur. Si la vérification échoue, arrêtez de charger la page Web. Bien entendu, cela ralentira la vitesse de chargement de la page Web et nécessitera une optimisation supplémentaire. Les méthodes d'optimisation spécifiques dépassent le cadre de cette discussion et ne seront pas expliquées en détail ici.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn