Fiddler-расшифровка трафика SSL HttpsUrlConnection для Android

Я потратил бесчисленные часы, пытаясь расшифровать трафик SSL Android через Fiddler для HttpsUrlConnection с очень небольшим успехом. Как надежно настроить Fiddler для расшифровки SSL-трафика из приложения Android с помощью HttpsUrlConnection?

вот мои шаги

  1. запустите Fiddler на ПК (с правильными настройками: захват HTTPS Connect, расшифровка трафика HTTPS, разрешить удаленные компьютеры для подключения)
  2. настройка беспроводного соединения на устройстве Android для прокси через ПК работает fiddler
  3. С android устройства откройте браузер для http: / / [ip ПК под управлением fiddler]: 8888 и загрузите "сертификат FiddlerRoot". Назовите и установите его.
  4. открыть 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:

  1. в Fiddler нажмите "правила - > настроить правила";

  2. В открывшемся скрипте и найти функцию OnBeforeResponse

  3. в теле функции добавить следующий код:

    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 позволит ему работать.