Как заставить прокси-сервер 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. ,

Излишне говорить, что я установил сертификат pfx из « Settings -> Security -> Install from storage . Сертификат отображается в User Credentials но не в Trusted credentials -> User . На моем устройстве с леденец здесь указаны сертификаты.

Я использую okhttp3 в качестве библиотеки HTTP.

Любая идея, что я делаю неправильно?

На основе темы устранения неполадок комментариев для OP ответ заключается в том, чтобы установить только CA-сертификат прокси-сервера как доверенный, а не его cert + закрытый ключ.

Проблема была вызвана двумя факторами:

  1. Установка не только сертификата CA доверенного лица MiTM, но и его закрытого ключа (что позволяет VPN-приложениям на устройстве расшифровывать / трафик сети MiTM из других приложений). Вам не нужен секретный ключ прокси-сервера MiTM на устройстве.

  2. 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 будет таким:

  1. Настройте WiFi + proxy (как это требует Чарльз). Подключите его.
  2. На устройстве перейдите с Chrome на http://charlesproxy.com/getssl , примите запрос на загрузку .pem, затем нажмите «open», он запускает приложение «Установка сертификата». Используйте его для установки сертификата как «VPN и приложения».
  3. Поместите атрибут android:networkSecurityConfig="@xml/network_security_config" в в Manifest.xml
  4. Создайте res / xml / network_security_config.xml с контентом из первого сообщения (это абсолютно правильно).
  5. Запустите Чарльза и приложение и получайте удовольствие.

PS Проверьте дату / время на устройстве. Это должно быть правильно.

Я написал сценарий, который ввел apk с необходимыми исключениями и разрешил использовать Charles Proxy с приложением.

Это Github https://github.com/levyitay/AddSecurityExceptionAndroid

Я на Android 7.1.1, вот как я настраиваю свое устройство (OnePlus One) – без изменения манифеста (я ориентировал API 21 для своего приложения):

В Карл Прокси:

  1. Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser . На этом этапе вы получите IP-адрес прокси-сервера и номер порта, а также ссылку на то, где вы должны загрузить SSL-прокси SSL.

На вашем телефоне:

  1. Wifi Settings > Modify Network > Advanced Options . Установите Proxy на Manual и введите номер IP и порта, который вы получили от Charles, в Proxy hostname и Proxy port соответственно.

  2. (ДОПОЛНИТЕЛЬНО) Вы можете или не можете получить доступ к ссылке chls.pro/ssl, предоставленной Чарльзом ранее. На моем устройстве мне всегда сообщалось, что у меня нет сетевого подключения. Я добавил charlesproxy.com в Bypass proxy for поля.

  3. В своем браузере перейдите по ссылке на шаге 3 и загрузите любой необходимый сертификат (если он не работает в Chrome, загрузите браузер Dolphin). Вы можете назвать свой сертификат каким-либо именем.

Назад на Карл Прокси:

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

Теперь вы можете использовать Charles on Nougat 7.1.1.

  • Как определить изменение ориентации в макете в Android?
  • Пользовательский макет пользовательского интерфейса Android ProgressBar
  • Как изменить формат даты в Android?
  • Выравнивание текстовых изображений на левом и правом краях в макете Android
  • Как поддерживать сеанс в Android?
  • Как использовать RecyclerView внутри NestedScrollView?
  • Android: использование WebView вне контекста активности
  • Включить Stetho только в варианте сборки отладки
  • Как удалить вкладку из TabHost
  • При создании службы нет пустого конструктора
  • Как обрабатывать OutOfMemoryError
  • Давайте будем гением компьютера.