В целях обеспечения качественного процесса тестирования мобильных приложений, не следует ограничиваться лишь анализом внешнего поведения программ.
Анализ трафика
Просмотр трафика позволяет глубже погрузиться в оценку функциональности, выявить дефекты, обнаружить которые визуально не представляется возможным, а также точнее диагностировать причины их возникновения. Для анализа трафика мы применяем трафик-снифферы (в нашем случае это, Charles Proxy). Достаточно подключить приложение к прокси, установить на телефон пользовательский сертификат сниффера, включить чтение SSL-прокси – и мы в игре.
Анализ трафика на Android
Данный подход ранее работал на Android без проблем, однако начиная с версии Android 7 (API 24) в ОС были внесены изменения. Теперь по умолчанию мы не можем получить доступ к трафику приложений используя пользовательский сертификат, это возможно только с системными сертификатами.
Что делать в подобной ситуации?
Для этого вам понадобится доступ к исходному коду вашего приложения. В него нужно сначала добавить файл конфигурации безопасности в Android манифест:
<?xml version="1.0" encoding="utf-8"?> ... <app ...> <meta-data android:name="android.security.net.config" android:resource="@xml/network_security_config" /> ... </app>
Функция конфигурации сетевой безопасности использует формат файлов XML. Общая структура файла показана ниже:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="..."/> ... </trust-anchors> </base-config> <domain-config> <domain>android.com</domain> ... <trust-anchors> <certificates src="..."/> ... </trust-anchors> <pin-set> <pin digest="...">...</pin> ... </pin-set> </domain-config> ... <debug-overrides> <trust-anchors> <certificates src="..."/> ... </trust-anchors> </debug-overrides> </network-security-config>
Использование пользовательских сертификатов
Оптимальным решением данной проблемы будет разрешение использования пользовательских сертификатов для отладочных сборок. Для этого мы воспользуемся переопределениями debug-overrides. Они применяются, когда параметр android:debuggable имеет значение «true”. Якоря доверия, указанные в debug-overrides, добавляются ко всем другим конфигурациям. Прикрепление сертификатов не выполняется, если цепочка сертификатов сервера использует один из этих якорей доверия, предназначенных только для отладки. Если параметр android:debuggable имеет значение «false», этот раздел полностью игнорируется.
Там мы указываем использование и системных и пользовательских сертификатов:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config>
После этого, мы сможем полноценно тестировать наше приложение на debug-сборках, при этом боевые сборки по-прежнему не будут предоставлять доступ к трафику приложения, что важно для безопасности данных пользователя.