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
Стандартные приложения Android для почты, календаря, контактов и т.д. можно синхронизировать с SSL-защитой серверов, но у них нет возможности проверить свои удостоверения. В принципе, можно либо проверить, если сертификат выдан одним из стандарта (до Android 4.0, а не пользователь редактируемые) CAS или не проверить их на всех. Это не достаточно, чтобы надежно утверждать подлинность сервера, который представляет риск предоставления конфиденциальной информации (пароли учетных записей) на неправильный сервер. Эта проблема особенно важно, когда сервер находится на полу-экспозиционно связи и найти через динамический DNS, использует самозаверяющий или частного CA сертификаты, или при использовании точек доступа общественной WiFi (которые довольно тривиально подделывать и поэтому регулярно MitM -attack вектор).
Это приложение проверяет, в настраиваемые промежутки времени, если даны HTTPS URL является достижимым и сервер идентифицирует себя с правой сертификата. Он состоит из виджета на главном экране отображаются статус с цветными "сигнальных огней":
* Зеленый, если соединение хорошо
* Желтый, когда проверка ведется
* Красный, когда сервер недоступен
* Двойной красный, когда сервер предоставляет ошибки или не проверять сертификат
* Маленький белый, даже когда проверка не требуется
При проверке и, когда происходит ошибка, установка глобальной синхронизации выключен. Таким образом, вы должны быть достаточно безопасны, что синхронизация не пытаться подключиться к серверу, чья личность не проверяется, учитывая это тот же сервер, как тот, который вы проверка.
Это с открытым исходным кодом (GPL) приложение. Источник и другая документация доступна через мой веб-сайт.
Готовыми документами:
ИНТЕРНЕТ - не подключиться к серверу (нигде)
ACCESS_NETWORK_STATE - определить подключение (WLAN, телефон ...), чтобы выяснить, если проверка необходима
READ_SYNC_SETTINGS, WRITE_SYNC_SETTINGS - Поверните SYNC OFF на проверке или ошибки
RECEIVE_BOOT_COMPLETED - автоматический запуск (если это возможно, в зависимости от версии Android)
READ_EXTERNAL_STORAGE - читать сертификаты из памяти или SD карты