- PVSM.RU - https://www.pvsm.ru -
Иногда бывает любопытно подсмотреть, что пересылают туда-сюда разные Android-приложения по HTTP и HTTPS протоколам. Иногда даже при разработке собственного ПО удобно видеть весь трафик в реальном времени. Для реализации этих задач давно придумано много хороших программ, таких, к примеру, как Charles [1] или Fiddler2 [2]. На самом деле их намного больше, вот только две вышеуказанные дают возможность нормально просматривать не только HTTP, но и HTTPS.
Трудности начинаются тогда, когда речь заходит о перехвате трафика между Андроид-устройством и внешним сервером. В случае незашифрованного (HTTP-протокол) трафика всё весьма тривиально (вот и инструкция [3] есть) — разрешаем Fiddler2 внешние соединения, в Андроиде устанавливаем прокси сервером адрес нашей машины с Fiddler2 — и вуаля, всё работает. А вот на настройку перехвата HTTPS-трафика у меня ушло чуть больше времени.
Итак, в чём же сложность? В том, что при использовании протокола HTTPS клиент по-умолчанию проверяет, а действительно ли тот сервер, к которому он подключился, является нужным. Для этого используются сертификаты. И вот у настоящего сервера этот сертификат, понятное дело, тоже настоящий и соответствует открытому URL, а вот у нашего прокси — нет. Для решения этой проблемы в десктопных операционных системах в таких случаях есть возможность сгенирировать в Fiddler2 поддельный сертификат, импортировать его в доверенные — и теперь клиент всегда будет верить, что соединение с Fiddler2 вполне безопасно. К сожалению, с мобильным устройством такой легкий финт ушами не прошел.
Во-первых, возможности импортировать внешний сертификат в Андроиде версий младше 4.0 нет. Есть какие-то не внушающие доверия варианты с рутоваными девайсами — но это не наш путь.
Во-вторых, в Андроид даже версии 4.0 импортировать сертификат Fiddler2 не получается. Дело в том, что генерируемый по-умолчанию сертификат не соответствует каким-то там Андроидовским критериям безопасности и не устанавливается. Его нужно генерировать специальным образом.
В-третьих, совсем даже не факт, что все подряд программы сразу поверят поддельному сертификату. Есть нюансы.
Итак, с браузером получилось. К сожалению, не все программы столь доверчивы, как браузер. К примеру, в моей собственной софтине, где я использую Apache HTTP Client [7], способ не прокатил — плевал апачевский клиент на доверенные сертификаты операционки. В этом случае мне пришлось отключить эту проверку вручную, таким вот образом:
Protocol.registerProtocol("https", new Protocol("https", new EasySSLProtocolSocketFactory(), 443));
где EasySSLProtocolSocketFactory взят отсюда [8] и разрешает доверие к любым сертификатам.
Не безопасно, только для отладки!
После этого трафик моей программы стал также успешно отображаться в Fiddler2.
Автор: tangro
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/18420
Ссылки в тексте:
[1] Charles: http://www.google.ru/url?sa=t&rct=j&q=charles&source=web&cd=1&cad=rja&sqi=2&ved=0CCMQFjAA&url=http%3A%2F%2Fwww.charlesproxy.com%2F&ei=0qGPUPbVMYvR4QTik4C4AQ&usg=AFQjCNG_O70VsRrfb_q7F66Nkb9ZK6MNMA
[2] Fiddler2: http://www.google.ru/url?sa=t&rct=j&q=fiddler&source=web&cd=1&cad=rja&sqi=2&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.fiddler2.com%2F&ei=5KGPUJz-C4aG4gTFsYDoBw&usg=AFQjCNGyVxcKeoiBFf3LsfsM8apoKVxKLQ
[3] инструкция: http://aurir.wordpress.com/2010/03/22/tutorial-getting-android-emulator-working-with-fiddler-http-proxy-tool/
[4] Fiddler2: http://www.fiddler2.com/fiddler2/version.asp
[5] отсюда: http://www.fiddler2.com/dl/FiddlerCertMaker.exe
[6] google.com: https://google.com
[7] Apache HTTP Client: http://hc.apache.org/httpclient-3.x/
[8] отсюда: http://www.jdocs.com/httpclient/3.0.1/org/apache/commons/httpclient/contrib/ssl/EasySSLProtocolSocketFactory.html
[9] Источник: http://habrahabr.ru/post/156711/
Нажмите здесь для печати.