Infopulse - Expert Software Engineering, Infrastructure Management Services
Send message Request a call
Send message Please fill in this quick form and we will send you a free quote shortly.
* Required fields
Request a call Please fill in this quick form and we will call you back shortly.
* Required fields
Subscribe to Infopulse Newsletter Please fill in this quick form to be among the first to receive our updates.
* Required fields
Send an email to Volodymyr Korniichuk Please fill in this quick form to contact our expert directly.
* Required fields
Read the rest of the Case Study Don't miss the most interesting part of the story!
Submit this quick form to see the rest and to freely access all case studies on our website.
* Required fields

Ü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

  1. 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.
  2. Installieren Sie die neueste Version von Fiddler2 auf Ihrem PC.
  3. Installieren Sie Spezialbibliotheken, um Android-kompatible Sicherheitszertifikate (hier) zu generieren.
  4. 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).
  5. Fügen Sie das Sicherheitszertifikat zu den vertrauenswürdigen bei Android («Einstellungen> Sicherheit> Installieren von der SD-Karte») hinzu.
  6. Export security certificate

  7. Starten Sie Fiddler2, erlauben Sie Remote-Verbindungen in den Optionen.
  8. Add certificate to the trusted

  9. Geben Sie die Adresse des PCs mit Fiddler2 als Proxy in den Netzwerkeinstellungen bei Android ein.
  10. Edit access point

  11. Öffnen Sie das Browser bei Android, geben Sie google.com ein und beobachten Sie die Anfrage und Antwort im Fiddler2-Fenster.
  12. Observe the request and response

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.

Share this blog article:
Subscribe to our Newsletter