Die Standard-Android-Anwendungen für Mail, Kalender, Kontakte etc. können mit SSL-geschützten Servern synchronisieren, haben aber keine Möglichkeit, deren Zertifikate zu überprüfen. Es ist lediglich möglich, entweder zu prüfen, ob das Zertifikat von einem der (vor Android 4.0 nicht frei editierbaren) Standard-CAs signiert wurde, oder es gar nicht zu prüfen. Dies ist nicht genug, um zuverlässig die Identität des Servers festzustellen und zu vermeiden, dass vertrauliche Informationen (Passwörter) an den falschen Server gesendet werden. Dies ist besonders wichtig, wenn der Server auf einer semi-permamenten Verbindung und über dynamischen DNS angesprochen wird, self-signed oder private-CA-Zertifikate benutzt, oder bei der Verwendung öffentlicher WiFi-Hotspots (diese sind trivial zu fälschen und sind daher eine regelmäßige Quelle für MitM-Angriffe).
Diese App überprüft in einstellbaren Intervallen, ob eine bestimmte HTTPS-URL erreichbar ist und der Server sich mit dem richtigen Zertifikat identifiziert. Die App besteht aus einem Home-Bildschirm-Widget, das den Status in Form einer "Ampel" anzeigt:
* Grün, wenn die Verbindung in Ordnung ist
* Gelb, wenn eine Prüfung im Gange ist
* Rot, wenn der Server nicht erreichbar ist
* Doppel-Rot, wenn der Server Fehler gibt oder die Zertifikatsprüfung fehlschlägt
* Klein-Weiß, wenn keine Prüfung erforderlich ist
Bei der Überprüfung und wenn ein Fehler passiert, wird die Synchronisation global deaktiviert. Auf diese Weise kann einigermaßen sichergestellt werden, dass niemals mit einem Server synchronisiert wird, dessen Identität nicht verifiziert wurde. Dazu sollte der gleiche Server, der für die Synchronisation verwendet wird, auch hier eingetragen sein.
Diese Open-Source-App wird unter GPL vertrieben. Source und weitere Dokumentation über meine Website erhältlich.
Benötigte Berechtigungen:
INTERNET - verbindet zum konfigurierten Server (sonst nichts)
ACCESS_NETWORK_STATE - Verbdindungsstatus (WLAN, Mobilfunk) bestimmt, wann Prüfung nötig ist
READ_SYNC_SETTINGS, WRITE_SYNC_SETTINGS - Synchronisation ein/ausschalten
RECEIVE_BOOT_COMPLETED - startet beim Gerätestart (wenn möglich - Android-versionsabhängig)
READ_EXTERNAL_STORAGE - liest Zertifikate aus der Speicherkarte