The standard Android applications for mail, calendar, contacts etc. can synchronize against SSL-protected servers but have no option to check their certificate. Basically, it is possible to either check if the certificate is issued by one of the standard (before Android 4.0, not user-editable) CAs, or not check them at all. This is not enough to reliably assert the identity of the server, which presents the risk of giving sensitive information (account passwords) to the wrong server. This problem is especially important when the server is on a semi-permament connection and found via dynamic DNS, uses self-signed or private-CA certificates, or when using public WiFi hotspots (which are rather trivial to fake and therefore are a regular MitM-attack vector).
This app checks in configurable intervals if a given HTTPS URL is reachable and the server identifies itself with the right certificate. It consists of a home screen widget displaying the status with colored "signal lights":
* green, if the connection is okay
* yellow, when a check is underway
* red, when the server is unreachable
* double red, when the server gives errors or fails certificate checking
* small white, when checking is not needed
When checking and when an error happens, the global synchronization setting is turned off. This way you should be reasonably safe that the synchronization does not try to connect to a server whose identity is not verified, given it is the same server as the one you check.
This is an open source (GPL) app. Source and further documentation is available via my Web site.
Permissions needed:
INTERNET - connect to your server (nowhere else)
ACCESS_NETWORK_STATE - determine your connection (WLAN, mobile...) to find out if checking is needed
READ_SYNC_SETTINGS, WRITE_SYNC_SETTINGS - turn sync off on checking or error
RECEIVE_BOOT_COMPLETED - automatic start (if possible, depending on Android version)
READ_EXTERNAL_STORAGE - read certificates from memory or SD card
Le applicazioni Android standard per la posta, calendario, contatti, ecc possono sincronizzare contro i server SSL protetto, ma non hanno possibilità di controllare la loro certificazione. In sostanza, è possibile sia verificare se il certificato è rilasciato da uno degli standard (prima Android 4.0, non modificabile dall'utente) CA, o non li controllano affatto. Questo non è sufficiente per affermare in modo affidabile l'identità del server, che presenta il rischio di dare informazioni sensibili (password degli account) al server sbagliato. Questo problema è particolarmente importante quando il server è su una connessione semi-permament e trovato tramite DNS dinamico, utilizza certificati autofirmati o privato-CA, o quando si utilizza hotspot WiFi pubblici (che sono piuttosto banale falso e quindi sono un normale MitM vector Attack-).
Questa applicazione verifica a intervalli configurabili se un determinato URL HTTPS è raggiungibile e il server si identifica con il certificato destra. Si compone di un widget schermata iniziale che visualizza lo stato di colore "luci di segnalazione":
* Verde, se la connessione è ok
* Giallo, quando un controllo è in corso
* Rosso, quando il server non è raggiungibile
* Rosso a due, quando il server dà errori o non riesce il controllo certificato
* Piccolo bianco, quando il controllo non è necessario
Quando si controlla e quando si verifica un errore, l'impostazione sincronizzazione globale è disattivata. In questo modo si dovrebbe essere ragionevolmente sicuri che la sincronizzazione non tenta di connettersi a un server la cui identità non è verificata, dato che è lo stesso server di quello di controllare.
Si tratta di un open source (GPL) app. Fonte e ulteriori informazioni sono disponibili tramite il mio sito web.
Permessi necessari:
INTERNET - connettersi al server (nessun altro)
ACCESS_NETWORK_STATE - determinare la vostra connessione (WLAN, mobili ...) per scoprire se è necessario il controllo
READ_SYNC_SETTINGS, WRITE_SYNC_SETTINGS - turn off sync sul controllo o errore
RECEIVE_BOOT_COMPLETED - avvio automatico (se possibile, a seconda della versione di Android)
READ_EXTERNAL_STORAGE - leggi certificati dalla memoria o sulla scheda SD