Сбой рукопожатия CharlesProxy SSL на Android Nougat

Я пытаюсь проксировать свой телефон под управлением Android 7.1.2, чтобы просмотреть сообщения и сообщения, сделанные через приложение, с которым я работаю. Используя CharlesProxy 4.1.4, это легко возможно для устройств iOS. Однако приложение работает по-другому на Android, и мы хотим знать, как это сделать.

Я настроил свое устройство для подключения к Charles, введя IP-адрес и порт, а затем перейдя к chls.pro/ssl, чтобы получить сертификат CA. Даже на хроме сертификат скачался и установился без ошибок. Я вижу звонки, поступающие на Чарльза, но не вижу никакого содержания звонка. Вместо этого он указан как <unknown> с указанием SSLHandshake: Received fatal alert: certificate_unknown.

Есть ли другой способ, которым я могу доверять этому сертификату? Или есть другой способ успешно разрешить SSL с Android? Опять же, все мои настройки отлично работают с устройствами iOS, поэтому мне не нужны примеры для этой ОС.

Спасибо


person twalrus    schedule 10.07.2017    source источник
comment
Предоставьте минимальный воспроизводимый пример, демонстрирующий, как ваше приложение обменивается данными через SSL.   -  person CommonsWare    schedule 11.07.2017
comment
Люди просто читают новые вопросы, пытаясь найти в них дыры? Кажется, здесь все заурядно... Я не работаю ни с каким кодом. Я пытаюсь увидеть вызовы общедоступного приложения, с которым работает моя компания, но не имеет над ним контроля.   -  person twalrus    schedule 13.07.2017
comment
Я не работаю с каким-либо кодом - тогда ваш вопрос не по теме, поскольку Stack Overflow предназначен для вопросов по программированию.   -  person CommonsWare    schedule 13.07.2017
comment
Вы установили сертификат ssl для Wi-Fi, для приложений или для обоих? У меня часто возникает одна и та же проблема, не всегда зная, откуда она берется. Иногда получается с первого раза, иногда нет...   -  person SeikoTheWiz    schedule 21.08.2017


Ответы (1)


Что касается Android N, вам необходимо добавить конфигурацию в свое приложение, чтобы оно доверяло сертификатам SSL, созданным прокси-сервером Charles SSL. Это означает, что вы можете использовать SSL-прокси только с приложениями, которыми вы управляете.

Чтобы настроить ваше приложение так, чтобы оно доверяло Чарльзу, вам необходимо добавить в приложение файл конфигурации сетевой безопасности. Этот файл может переопределить системное значение по умолчанию, позволяя вашему приложению доверять установленным пользователем сертификатам ЦС (например, корневому сертификату Чарльза). Вы можете указать, что это применимо только к отладочным сборкам вашего приложения, чтобы в производственных сборках использовался профиль доверия по умолчанию.

Добавьте файл res/xml/network_security_config.xml в ваше приложение:

<network-security-config> 
    <debug-overrides> 
        <trust-anchors> 
            <!-- Trust user added CAs while debuggable only -->
            <certificates src="user" /> 
        </trust-anchors> 
    </debug-overrides> 
</network-security-config>

Затем добавьте ссылку на этот файл в манифест вашего приложения следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config" ... >
        ...
    </application>
</manifest>

См.: https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

person Bird Bird    schedule 16.12.2017
comment
Итак, если мы хотим перехватить трафик для другого приложения, мы должны использовать версию Android до N? - person User; 27.09.2018
comment
Да ... это то, что я сделал - person Bird Bird; 15.11.2018
comment
Нет ли более простого способа разрешить приложениям использовать сертификат? Немного хлопотно добавить файл xml ко всем из них. - person MACC; 11.10.2019
comment
Какой самый простой способ добавить xml в приложение? Должен ли я загрузить apk локально, отредактировать его с помощью Eclipse и изменить файл xml внутри, а затем установить его на устройство Android? Кроме того, что делать, если в приложении уже есть файл network_security_config.xml с информацией внутри, должен ли я просто заменить его? - person MACC; 11.10.2019
comment
Разве он не должен также включать <base-config cleartextTrafficPermitted="true" /> ? Но тогда IDE предостерегает от этого. Любой способ установить его только для отладки здесь? - person android developer; 13.04.2021