https-Protokoll ist http+ssl-Protokoll. Der Verbindungsprozess ist in der folgenden Abbildung dargestellt:
Der Client sendet eine https-Anfrage an den Server;
Nach Erhalt der Anfrage generiert der Server den öffentlichen Schlüssel und den privaten Schlüssel. Der öffentliche Schlüssel entspricht einem Schloss und der private Schlüssel entspricht einem Schlüssel. Nur der private Schlüssel kann den durch den öffentlichen Schlüssel gesperrten Inhalt öffnen
Der Mittelsmann fängt die vom Client an den Server gesendete Anfrage ab und gibt dann vor, der Client zu sein, um mit dem Server zu kommunizieren. Er sendet den vom Server an den Client zurückgegebenen Inhalt und gibt vor, der Server zu sein, mit dem er kommuniziert der Kunde.
Um einen Man-in-the-Middle-Angriff nutzen zu können, muss der Client dem Zertifikat des Mittelsmanns vertrauen. Wenn der Client diesem nicht vertraut, funktioniert diese Angriffsmethode nicht.
Der Grund für Man-in-the-Middle-Hijacking besteht darin, dass das Serverzertifikat und der Domänenname nicht überprüft werden oder die Überprüfung unvollständig ist. Der Einfachheit halber wird die Standardüberprüfungsmethode des Open-Source-Frameworks direkt für https-Anfragen verwendet
Wie Volley
OKhttp3.0
Präventionsmethoden:
Es gibt zwei Präventionsmethoden
1. Bei Apps mit relativ hohen Sicherheitsanforderungen kann das Zertifikat durch Voreinbettung auf der Client-Seite gesperrt werden. Die Kommunikation ist jedoch nur dann zulässig, wenn das Client-Zertifikat und das Server-Zertifikat vollständig konsistent sind Bei dieser Methode besteht ein Problem, nämlich das Zertifikatablaufproblem. Da das Zertifikat eine bestimmte Gültigkeitsdauer hat, kann es nach Ablauf des vorab eingebetteten Zertifikats nur dadurch gelöst werden, dass die Aktualisierung erzwungen wird oder der Benutzer das Zertifikat herunterladen muss.
Nehmen Sie Volley als Beispiel: Die Verifizierung wird wie folgt implementiert
Erstellen Sie SSLSocketFactory über ein vorab eingebettetes Zertifikat;
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();
2 Bei Apps mit allgemeinen Sicherheitsanforderungen können Sie den Domänennamen, die Gültigkeit des Zertifikats, die Informationen zum Zertifikatsschlüssel und die Zertifikatskette überprüfen
Nehmen Sie Volley als Beispiel, schreiben Sie die checkServerTrusted-Methode in HTTPSTrustManager neu und aktivieren Sie die starke Überprüfung des Domänennamens
Es wird nicht empfohlen, handler.proceed() direkt zu verwenden. Wenn die Webansicht beim Laden von https eine starke Überprüfung des Serverzertifikats erfordert, können Sie HttpsURLConnection verwenden, um das Zertifikat in onPageStarted() stark zu überprüfen, um das Serverzertifikat zu überprüfen. Wenn die Überprüfung nicht erfolgreich ist, beenden Sie das Laden der Webseite. Dies verlangsamt natürlich die Ladegeschwindigkeit der Webseite und erfordert eine weitere Optimierung. Die spezifischen Optimierungsmethoden gehen über den Rahmen dieser Diskussion hinaus und werden hier nicht im Detail erläutert.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des HTTPS-Verbindungsprozesses sowie des Man-in-the-Middle-Angriffs und -Hijackings. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!