Abfangen von HTTPS-Verkehr zwischen Android-Gerät & Server
image of banner
Zurück

Überwachung des HTTPS-Datenverkehrs zwischen einem Android-Gerät und einem externen Server

Manchmal ist es interessant zu sehen, was unterschiedliche Android-Anwendungen über die HTTP- und HTTPS-Protokolle austauschen. Bei der Entwicklung der eigenen Software ist es manchmal praktisch, den gesamten Datenverkehr in Echtzeit beobachten zu können. Zur Lösung dieser Aufgaben sind viele verschiedene und gute Anwendungen entwickelt worden, z.B. Charles oder Fiddler2. Eigentlich gibt es mehr davon, doch nur die beiden Erwähnten decken sowohl HTTP als auch HTTPS ab.

Schwierigkeiten erscheinen bei der Überwachung des Datenverkehrs zwischen einem Android-Gerät und einem externen Server. Mit dem codierten (HTTP-) Verkehr ist alles ziemlich offensichtlich (hier ist eine Anleitung) — externe Links sind mit Fiddler2 erlaubt, in Android ist die Adresse unserer Maschine mit Fiddler2 als Server festgelegt — und voila, alles ist ok und läuft. Aber es hat bei mir etwas länger gedauert, bis die Überwachung des HTTPS-Datenverkehrs eingerichtet war.

Theorie

Also, was ist das Problem? Das Problem ist, dass der Client bei HTTPS standardmäßig überprüft, ob der Server, mit dem die Verbindung hergestellt wird, der richtige ist. Zu diesem Zweck werden Zertifikate verwendet. Also hat der reale Server, natürlich, ein echtes Zertifikat, das der offenen URL entspricht, während unser Proxy keins hat. Um das Problem in Desktop-Betriebssystemen zu umgehen, bietet Fiddler2 die Möglichkeit, ein gefälschtes Zertifikat zu generieren und es bei den vertrauenswürdigen Zertifikaten zu importieren — jetzt wird der Client immer glauben, dass die Verbindung zu Fiddler2 ziemlich sicher ist. Leider kaufen mobile Geräte einem diese Fälschung nicht ab.

In erster Linie ist es unmöglich, Zertifikate bei Android-Betriebssystemen zu importieren, die älter als v.4.0 sind. Es gibt einige zweifelhafte Optionen mit gerouteten Geräten, aber diese passen nicht zu uns. Zweitens ist es sogar unmöglich, ein Fiddler2-Zertifikat bei Android 4.0 zu importieren. Die Sache ist, dass das standardmäßig generierte Zertifikat einige Sicherheitskriterien von Android nicht erfüllt und daher nicht installiert werden kann. Es sollte auf besondere Weise generiert werden. Schließlich können wir es nicht für selbstverständlich halten, dass alle Anwendungen einem gefälschten Zertifikat trauen werden. Da gibt es einige Feinheiten.

Verwendung

  • Nehmen Sie ein Gerät mit Android 4.0 oder einer aktuelleren Version. Nein, ein 2.3-Gerät wird nicht passen. Ja, ein 4.0-Emulator wird passen.
  • Installieren Sie die neueste Version von Fiddler2 auf Ihrem PC.
  • Installieren Sie Spezialbibliotheken, um Android-kompatible Sicherheitszertifikate (hier) zu generieren.
  • Exportieren Sie das Sicherheitszertifikat von Fiddler2 («Tools> Fiddler-Optionen> HTTPS> Root-Zertifikat auf den Desktop exportieren»). Speichern Sie es auf Ihrem Speichermedium im Root-Verzeichnis (oder in Ihrem Emulator, wenn Sie einen verwenden).
  • Fügen Sie das Sicherheitszertifikat zu den vertrauenswürdigen bei Android («Einstellungen> Sicherheit> Installieren von der SD-Karte») hinzu.
  • Überwachung des HTTPS-Datenverkehrs zwischen einem Android-Gerät und einem externen Server - Infopulse - 188422

  • Starten Sie Fiddler2, erlauben Sie Remote-Verbindungen in den Optionen.
  • Überwachung des HTTPS-Datenverkehrs zwischen einem Android-Gerät und einem externen Server - Infopulse - 125890

  • Geben Sie die Adresse des PCs mit Fiddler2 als Proxy in den Netzwerkeinstellungen bei Android ein.
  • Überwachung des HTTPS-Datenverkehrs zwischen einem Android-Gerät und einem externen Server - Infopulse - 195288

  • Öffnen Sie das Browser bei Android, geben Sie google.com ein und beobachten Sie die Anfrage und Antwort im Fiddler2-Fenster.
  • Überwachung des HTTPS-Datenverkehrs zwischen einem Android-Gerät und einem externen Server - Infopulse - 161877

    Also, mit dem Browser hat es geklappt, aber leider sind nicht alle Anwendungen so zutraulich wie der Browser. Meine Software z.B., wo ich den Apache HTTP Client verwendet habe, hat das nicht geschluckt, der Apache-Client könnte sich kaum weniger um die betriebssystemkonforme Zertifikate kümmern. In diesem Fall hatte ich diese Überprüfung manuell wie folgt deaktivieren müssen:

    Protocol.registerProtocol("https", new Protocol("https", new EasySSLProtocolSocketFactory(), 443));
    

    wo EasySSLProtocolSocketFactory erlaubt, allen Zertifikaten zu vertrauen.

    Nicht sicher! Nur fürs Debuggen!

    Danach wurde der Datenverkehr meiner Anwendung in Fiddler2 erfolgreich sichtbar.

    Weitere Artikel

    Wir haben eine Lösung für Ihre Anforderungen. Senden Sie uns einfach eine Nachricht, und unsere Experten werden sich so schnell wie möglich mit Ihnen in Verbindung setzen.

    Vielen Dank!

    Wir haben Ihre Anfrage erhalten und werden Sie in Kürze kontaktieren.