Как заставить прокси-сервер charles работать с nougat 7 Android?
Android 7 внесла некоторые изменения в способ обработки сертификатов ( http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html ), и почему-то я не могу больше работать с прокси-сервером Charles.
Мой network_security_config.xml:
Я работаю в режиме отладки. Но несмотря ни на что, я получаю javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
,
- Невозможно создать AVD или протестировать любое приложение с помощью AVD после создания инструментов сборки до 22.6
- Масштабный коэффициент для xxhdpi android?
- реагировать на собственный андроид не удалось загрузить пакет JS
- Не удается подключиться к удаленному отладчику
- Повторить задачу с задержкой?
Излишне говорить, что я установил сертификат pfx
из « Settings -> Security -> Install from storage
. Сертификат отображается в User Credentials
но не в Trusted credentials -> User
. На моем устройстве с леденец здесь указаны сертификаты.
Я использую okhttp3 в качестве библиотеки HTTP.
Любая идея, что я делаю неправильно?
- Обработчик против AsyncTask
- CoordinatorLayout, используя ViewPager's RecyclerView
- Как проверить, может ли какое-либо намерение быть обработано из какой-либо деятельности?
- Android Studio не показывает предварительный просмотр макета
- DialogFragment и onDismiss
- Android - обнаружит событие разблокировки телефона, а не экран
- Как начать работу в адаптере?
- Разница между onStart () и onResume ()
На основе темы устранения неполадок комментариев для OP ответ заключается в том, чтобы установить только CA-сертификат прокси-сервера как доверенный, а не его cert + закрытый ключ.
Проблема была вызвана двумя факторами:
-
Установка не только сертификата CA доверенного лица MiTM, но и его закрытого ключа (что позволяет VPN-приложениям на устройстве расшифровывать / трафик сети MiTM из других приложений). Вам не нужен секретный ключ прокси-сервера MiTM на устройстве.
-
Android Nougat изменяет поведение
Settings -> Security -> Install from storage
streamаSettings -> Security -> Install from storage
для файлов, которые содержат закрытый ключ в дополнение к сертификату (-ам). Это изменение в поведении разоблачило вышеупомянутую проблему.
До Nougat Settings -> Security -> Install from storage
streamа Settings -> Security -> Install from storage
для файлов, содержащих закрытый ключ, в дополнение к сертификатам, ошибочно устанавливали сертификаты как надежные для аутентификации сервера (например, HTTPS, TLS, что делает ваш MiTM успешным), кроме того к правильной установке в качестве клиентских сертификатов, используемых для аутентификации этого устройства Android на серверах. В Nougat ошибка была исправлена, и эти сертификаты больше не установлены в качестве доверенных для аутентификации сервера. Это не позволяет учетным данным проверки подлинности клиента влиять на (безопасность) соединений на серверы. В вашем сценарии это не позволяет вашему MiTM преуспеть.
Что усложняет ситуацию, так это то, что Settings -> Security -> Install from storage
не дает явного способа указать пользователю, устанавливают ли они учетные данные для проверки подлинности клиента (закрытый ключ + цепочка сертификатов) или доверенность доверия подлинности сервера (только CA cert – не требуется личный ключ). В результате Settings -> Security -> Install from storage
« Settings -> Security -> Install from storage
угадывают, имеет ли он дело с аутентификацией доверенности клиент / пользователь или доверенность доверия аутентификации сервера, предположив, что, если указан закрытый ключ, он должен быть удостоверением личности клиента / пользователя , В вашем случае неверно предполагается, что вы устанавливаете учетные данные для проверки подлинности клиента / пользователя, а не доверяющий доверенность на проверку подлинности сервера.
PS Что касается конфигурации сетевой безопасности, вероятно, вы должны настроить приложение, чтобы также доверять «системным» привязкам доверия в режиме отладки (раздел debug-overrides). В противном случае отладочные сборки приложения не будут работать, если соединения не являются MiTM’d прокси, чей сертификат CA установлен как надежный на устройстве Android.
Решение не использует .p12 , просто перейдите с Chrome (с настроенным прокси на Wi-Fi) на http://charlesproxy.com/getssl и установите загруженный файл .pem .
У меня была такая же проблема на моем Nexus 5X под управлением Android 7.0. Ранее был экспортирован .p12 из Charles 3.11.5 (Help-> SSL Proxying-> Export Charles Root certificate и Private key). Когда я попытался установить .p12 с телефона (Настройки-> Безопасность-> Установить из хранилища), он отображается только в разделе «Пользовательские учетные данные» и никогда не включен в «Доверенные учетные данные», и, конечно же, SSL с использованием прокси-сервера Charles не работает.
Общее «How-To» для Android 7.0 будет таким:
- Настройте WiFi + proxy (как это требует Чарльз). Подключите его.
- На устройстве перейдите с Chrome на http://charlesproxy.com/getssl , примите запрос на загрузку .pem, затем нажмите «open», он запускает приложение «Установка сертификата». Используйте его для установки сертификата как «VPN и приложения».
- Поместите атрибут
android:networkSecurityConfig="@xml/network_security_config"
в
в Manifest.xml - Создайте res / xml / network_security_config.xml с контентом из первого сообщения (это абсолютно правильно).
- Запустите Чарльза и приложение и получайте удовольствие.
PS Проверьте дату / время на устройстве. Это должно быть правильно.
Я написал сценарий, который ввел apk с необходимыми исключениями и разрешил использовать Charles Proxy с приложением.
Это Github https://github.com/levyitay/AddSecurityExceptionAndroid
Я на Android 7.1.1, вот как я настраиваю свое устройство (OnePlus One) – без изменения манифеста (я ориентировал API 21 для своего приложения):
В Карл Прокси:
-
Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser
. На этом этапе вы получите IP-адрес прокси-сервера и номер порта, а также ссылку на то, где вы должны загрузить SSL-прокси SSL.
На вашем телефоне:
-
Wifi Settings > Modify Network > Advanced Options
. Установите Proxy наManual
и введите номер IP и порта, который вы получили от Charles, вProxy hostname
иProxy port
соответственно. -
(ДОПОЛНИТЕЛЬНО) Вы можете или не можете получить доступ к ссылке chls.pro/ssl, предоставленной Чарльзом ранее. На моем устройстве мне всегда сообщалось, что у меня нет сетевого подключения. Я добавил charlesproxy.com в
Bypass proxy for
поля. -
В своем браузере перейдите по ссылке на шаге 3 и загрузите любой необходимый сертификат (если он не работает в Chrome, загрузите браузер Dolphin). Вы можете назвать свой сертификат каким-либо именем.
Назад на Карл Прокси:
- Вы должны получить приглашение либо
Allow
либоDeny
вашему телефону использовать прокси-сервер, если ваши настройки по умолчанию запрошены для удаленных подключений.
Теперь вы можете использовать Charles on Nougat 7.1.1.