Fiddler-расшифровка трафика SSL HttpsUrlConnection для Android
Я потратил бесчисленные часы, пытаясь расшифровать трафик SSL Android через Fiddler для HttpsUrlConnection с очень небольшим успехом. Как надежно настроить Fiddler для расшифровки SSL-трафика из приложения Android с помощью HttpsUrlConnection?
вот мои шаги
- запустите Fiddler на ПК (с правильными настройками: захват HTTPS Connect, расшифровка трафика HTTPS, разрешить удаленные компьютеры для подключения)
- настройка беспроводного соединения на устройстве Android для прокси через ПК работает fiddler
- С android устройства откройте браузер для http: / / [ip ПК под управлением fiddler]: 8888 и загрузите "сертификат FiddlerRoot". Назовите и установите его.
- открыть https://www.google.com в браузере android и просмотр расшифрованного трафика в Fiddler на ПК.
вышеуказанных работ. Проблема в том, что трафик без браузера android отображается в Fiddler как туннели подключения. Мои первоначальные исследования предложил проблема была связана с тем, как сертификаты были доверены через HttpsUrlConnection, поэтому я убедился, что доверяю всем сертификатам на основе этой статьи https://secure.mcafee.com/us/resources/white-papers/wp-defeating-ssl-cert-validation.pdf
к сожалению, доверие всем сертификатам не работало для меня с HttpsUrlConnection, поэтому я прекратил расследование. Через несколько дней я решил попробовать еще раз и был удивлен, обнаружив, что трафик fiddler дешифруется для HttpsUrlConnection! К Сожалению, Я не сделал никаких дальнейших изменений, чтобы исправить это, поэтому я не совсем уверен, почему он начал работать. Устройство, с которым он работает, является LG-Optimus L9 Android версии 4.0.4 и имеет корни.
теперь я пытаюсь настроить это для Nexus 7 Android версии 4.2.2 (не коренится), но, увы, все, что я вижу в fiddler, это соединительные туннели. Поскольку сертификат на обоих устройствах имеет один и тот же серийный номер, и приложение, которое я тестирую, идентично, я в тупике, почему я не могу настроить Fiddler с другим Android устройство.
подведем итоги
- Fiddler может расшифровать трафик SSL от LG Optimus, но показывает только подключение туннелей от Nexus 7
- на обоих устройствах работает одно и то же приложение, которое использует HttpsUrlConnection для сетевых запросов
- на обоих устройствах установлен один и тот же сертификат fiddler (совпадение серий), а другой сертификат пользователя не установлен.
- не думаю, что это важно, но...
- корневое устройство (LG Optimus Android 4.0.4) использует Прокси дроид, чтобы указать на ПК под управлением скрипача
- некорневое устройство (Nexus 7 Android 4.2.2) с помощью встроенного "изменить сеть", чтобы указать на ПК под управлением fiddler
3 ответов
мое исследование показало, что существует ошибка в реализации конвейеризации HttpsUrlConnection.
чтобы решить проблему, вам нужно выполнить следующие шаги в Fiddler:
в Fiddler нажмите "правила - > настроить правила";
В открывшемся скрипте и найти функцию OnBeforeResponse
-
в теле функции добавить следующий код:
if (oSession.oRequest["User-Agent"].indexOf("Dalvik") > -1 && oSession.HTTPMethodIs("CONNECT")) { oSession.oResponse.headers["Connection"] = "Keep-Alive"; }
4.Сохранить файл и перезапустить Скрипач!--2-->
вот обходной путь.
предполагая, что имя хоста, которому я отправляю свои https-запросы, myHostName.com добавьте следующее К CustomRules скрипача.js
if (!oSession.isHTTPS && !oSession.HTTPMethodIs("CONNECT") && (oSession.HostnameIs("myHostName"))
{
oSession.oRequest.headers.UriScheme = "https";
}
затем в коде Android обновите URL-адрес, чтобы использовать http вместо https.
теперь клиент будет общаться с Fiddler без SSL, и весь трафик запроса/ответа будет виден.
очевидным недостатком этого подхода является то, что URL-адреса должны быть изменены в клиенте использовать http. Я не использовал этот подход достаточно долго, чтобы обнаружить какие-либо дополнительные недостатки.
наличие корневого устройства является ключом. По крайней мере в моем случае.
Я откорчевал LG Optimus Android 4.0.4, и он обновился до 4.1.2. Я попробовал скрипач будет все те же шаги, но только туннели подключения показали.
Я снова запустил LG Optimus, и сразу же я вижу все запросы/ответы через fiddler.
Я предполагаю, что укоренение N7 позволит ему работать.