Перфоманс Лаб

android
мобильное тестирование
19 марта, 2019

Как читать трафик мобильного приложения под Android 7 и выше

Время чтения: 6 мин.
19 марта, 2019
Автор:
Даниил Майстренко

В целях обеспечения качественного процесса тестирования мобильных приложений, не следует ограничиваться лишь анализом внешнего поведения программ.

Анализ трафика

Просмотр трафика позволяет глубже погрузиться в оценку функциональности, выявить дефекты, обнаружить которые визуально не представляется возможным, а также точнее диагностировать причины их возникновения. Для анализа трафика мы применяем трафик-снифферы (в нашем случае это, 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-сборках, при этом боевые сборки по-прежнему не будут предоставлять доступ к трафику приложения, что важно для безопасности данных пользователя.

Чтобы узнать подробнее о наших услугах