Как заставить charles proxy работать с Android 7 nougat?
Android 7 внес некоторые изменения в способ обработки сертификатов (http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html) и почему-то я больше не могу заставить моего Чарльза прокси работать.
My network_security_config.XML-код:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Я работаю в режиме отладки. Но несмотря ни на что, я получаю 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
. На моем устройстве lollipop сертификаты перечислены там.
Я использую okhttp3 в качестве HTTP-библиотеки.
есть идеи, что я делаю неправильно ?
4 ответа:
на основе потока устранения неполадок комментариев для OP, ответ должен установить только сертификат CA прокси как доверенный, а не его cert + закрытый ключ.
проблема была вызвана двумя факторами:
установка не только сертификата CA прокси MiTM, но и его закрытого ключа (что позволяет VPN-приложениям на устройстве расшифровывать/MiTM сетевой трафик из других приложений). Вам не нужен закрытый ключ прокси MiTM на сервере устройство.
Android нуга изменение в поведении
Settings -> Security -> Install from storage
поток для файлов, которые содержат закрытый ключ в дополнение к сертификатам. Это изменение в поведении разоблачило вышеупомянутую проблему.до Нуга,
Settings -> Security -> Install from storage
поток для файлов, содержащих закрытый ключ в дополнение к сертификатам ошибочно установлены сертификаты как доверенные для аутентификации сервера( например, HTTPS, TLS, что делает ваш MiTM успешным), в дополнение к правильной установке как клиентские сертификаты, используемые для аутентификации этого устройства Android на серверах. В Nougat ошибка была исправлена, и эти сертификаты больше не устанавливаются как доверенные для аутентификации сервера. Это предотвращает влияние учетных данных проверки подлинности клиента на безопасность подключений к серверам. В вашем сценарии это препятствует успешному выполнению MiTM.что усложняет дело в том, что
Settings -> Security -> Install from storage
не предоставляет явного способа для пользователя указать, устанавливают ли они учетные данные для проверки подлинности клиента (закрытый ключ + цепочка сертификатов) или якорь доверия для проверки подлинности сервера (только сертификат CA-не требуется закрытый ключ). В результатеSettings -> Security -> Install from storage
поток угадывает, имеет ли он дело с учетными данными аутентификации клиента/пользователя или привязкой доверия аутентификации сервера, предполагая, что, если указан закрытый ключ, это должны быть учетные данные аутентификации клиента/пользователя. В вашем случае неверно предполагается, что вы устанавливаете учетные данные для проверки подлинности клиента / пользователя, а не якорь доверия проверки подлинности сервера.P. S. Что касается вашей конфигурации сетевой безопасности, вы, вероятно, должны настроить приложение также доверять "системным" якорям доверия в режиме отладки (раздел debug-overrides). В противном случае отладочные сборки приложения не будут работать, если подключения Митм бы доверенным лицом, чей сертификат будет установлен в качестве надежных на устройстве Android.
решение не использовать .p12, просто перейдите с Chrome (с настроенным прокси на wifi) в http://charlesproxy.com/getssl и установите скачанный .файл PEM.
у меня была точно такая же проблема на моем Nexus 5X под управлением Android 7.0. Там был ранее экспортирован .p12 от Charles 3.11.5 (Help->SSL Proxying->Export Charles Root certificate and Private key). Когда я пытался установить .p12 с телефона (Настройки - > Безопасность - >установить из хранилища) он появляется только в разделе " Учетные данные пользователя "и никогда в разделе" доверенные учетные данные", и, конечно же, SSL с Charles proxy не работал.
общее "how-to" для Android 7.0 было бы так:
- настройка WiFi + прокси (как требует Чарльз). Подключать его.
- на устройстве перейдите с помощью Chrome к http://charlesproxy.com/getssl, принять запрос на загрузку .pem, затем нажмите "Открыть", он запускает " сертификат установщик " приложение. Используйте его для установки сертификата как "VPN и приложения".
- поставить атрибут
android:networkSecurityConfig="@xml/network_security_config"
до<application>
в Манифесте.xml- создать res / xml / network_security_config.xml с контентом из первого поста (это совершенно правильно).
- запускаем Charles и приложение и получайте удовольствие.
P. S. проверить дату/время на устройстве. Это должно быть правильно.
Я написал скрипт, который вводит apk с необходимыми исключениями и позволяет использовать Charles Proxy с приложением.
Это Github https://github.com/levyitay/AddSecurityExceptionAndroid
Я на Android 7.1.1, вот как я настраиваю на своем устройстве (OnePlus One) - без изменения манифеста (я был нацелен на API 21 для моего приложения):
В Charles Proxy:
Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser
. Это шаги дает вам прокси IP и порт номер, а также ссылка на то, где вы должны скачать charles proxy SSL.в телефоне:
Wifi Settings > Modify Network > Advanced Options
. Установите прокси вManual
и введите IP и номер порта вы получили от Чарльза вProxy hostname
иProxy port
соответственно.(опционально) вы можете или не можете быть в состоянии получить доступ к члс.про/SSL-протокол ссылке, предоставленной Чарльз ранее. На моем устройстве меня всегда уведомляли, что у меня нет сетевого подключения. Я добавил: charlesproxy.com к