SSL Proxy/ Чарльз и проблема с Android
Я хочу, чтобы проверить Https звонки с Android-устройства с помощью инструмента прокси Чарльз. Мне нужно увидеть необработанное содержимое запроса / ответа для приложения отладки. Я настроил Чарльза, добавив хост и порт в "Настройки прокси" -> вкладка SSL. Когда я запускаю приложение, кажется, что все вызовы SSL быстро исчезают из Charles. Есть ли у кого-нибудь идеи, как решить эту проблему. Документация Чарльза не содержит информации для устройств Android.
8 ответов
Я понял проблему. Это потому, что в Charles 3.7 есть ошибки для устройств Android. Я обновил до бета-версии Charles 3.8 и, кажется, работает нормально для меня.
для Android7
обратитесь к: Как заставить работать прокси чарльза с нуга Android 7?
для версии Android ниже Android7
С вашего компьютера запустите Чарльз:
Откройте Настройки прокси: Прокси -> Настройки прокси, вкладка Прокси, отметьте "Включить прозрачное прокси HTTP" и запомните "Порт" в глубине души.
Настройки SSL-прокси: Прокси -> Настройки SSL-прокси, вкладка Прокси-сервер SSL, установите флажок "Включить SSL-прокси" и добавьте . в локации:
Откройте Настройки контроля доступа: Прокси -> Настройки контроля доступа. Добавьте свою локальную подсеть, чтобы авторизовать машины в вашей локальной сети для использования прокси с другого компьютера / мобильного устройства.
В телефоне Android:
Настройте свой мобильный: перейдите в "Настройки" -> "Беспроводные сети" -> "WiFi" -> "Подключите или измените свою сеть", введите IP-адрес компьютера и порт (8888):
Получите SSL-сертификат Charles. Посетите этот URL-адрес в своем мобильном браузере: http://charlesproxy.com/getssl
В "Название сертификата" введите все, что вы хотите
Примите предупреждение безопасности и установите сертификат. Если вы установите его успешно, то вы, вероятно, увидите следующее: в вашем телефоне Настройки -> Безопасность -> Доверенные учетные данные:
Готово.
тогда вы можете провести тест на своем мобильном телефоне, зашифрованный запрос https будет показан в Charles:
Изменить - этот ответ был для более ранней версии Чарльза. Смотрите @semicircle21 ответ ниже для правильных шагов для v3.10.x - намного проще, чем этот подход тоже...:-)
Для этого стоит пошаговая инструкция для этого. Они должны применяться одинаково хорошо и в iOS:
- Открой Чарльза
- Перейдите в Прокси> Настройки прокси> SSL
- Отметьте "Включить SSL-прокси"
- Выберите "Добавить местоположение" и введите имя хоста и порт (при необходимости).
- Нажмите ОК и убедитесь, что опция отмечена
- Загрузите сертификат Чарльза здесь: Сертификат Чарльза>;;
- Отправьте этот файл себе по электронной почте.
- Откройте электронную почту на вашем устройстве и выберите сертификат
- В "Название сертификата" введите все, что вы хотите
- Нажмите кнопку ОК, и вы должны получить сообщение, что сертификат был установлен
После этого вы сможете увидеть файлы SSL в Charles. Если вы хотите перехватить и изменить значения, вы можете использовать инструмент "Map Local", который действительно потрясающий:
- В Charles выберите Инструменты> Карта Local.
- Выберите "Добавить запись"
- Введите значения для файла, который вы хотите заменить
- В "Локальный путь" выберите файл, который вы хотите, чтобы приложение загружалось вместо
- Нажмите ОК
- Убедитесь, что запись выбрана и нажмите ОК
- Запустите ваше приложение
- В "Заметках" вы должны увидеть, что ваш файл загружается вместо реального
Спасибо за ответ @bkurzius, и это обновление для Чарльза 3.10+. (Причина здесь)
- Открой Чарльза
- Перейдите в Прокси-сервер> Настройки SSL-прокси...
- Отметьте "Включить SSL-прокси"
- Выберите "Добавить местоположение" и введите имя хоста и порт (при необходимости).
- Нажмите ОК и убедитесь, что опция отмечена
- Перейдите в "Справка"> "Прокси SSL">
Install Charles Root Certificate on a Mobile Device or Remote Browser...
и просто следуйте инструкциям. (используйте браузер Android для загрузки и установки сертификата.) - В "Название сертификата" введите все, что вы хотите
- Нажмите кнопку ОК, и вы должны получить сообщение, что сертификат был установлен
Я потратил 1 день на поиск проблемы, моя система не запрашивала соединение "разрешить" или "отклонить". Я думал, что это произошло из-за какой-то проблемы с сертификатом. попробовал все методы, упомянутые выше, но ни один из них не работал. в конце концов я обнаружил, что "брандмауэр был настоящим виновником". если настройки брандмауэра включены, они не позволят Чарльзу подключаться к вашему ноутбуку через IP-адрес прокси. убери их, и все будет работать гладко. Не уверен, что это был соответствующий ответ, но просто хочу поделиться.
Посмотреть здесь:
Вам нужно будет установить сертификат charles.crt на ваше устройство.
Ответы с самым высоким рейтингом работают отлично (немного устарело, но все еще работает), но я просто хочу упомянуть, что, начиная с Android N, мы все можем настраивать ваши приложения, чтобы иметь SSL-сертификаты разного доверия (только для выпуска, отладки и т. Д.), включая сертификат SSL SSL-прокси (если вы загрузили сертификат Charles и поместили файл.pem в папку raw). Более подробную информацию можно найти здесь: https://developer.android.com/training/articles/security-config.html
Также официальная документация Чарльза может быть полезна для настройки этого: https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/
Надеюсь, что это поможет настроить Чарльза внутри вашего проекта приложения не на каждом Android-устройстве.
Для более нового эмулятора может быть полезно запустить из командной строки, используя:
emulator -netdelay none -netspeed full -avd <emulator_name> -http-proxy http://<ip-address>:8888
Убедитесь, что вы следовали советам @User9527 выше, а также для остальной части установки
Для меня проблема заключалась в том, что IP-адрес, на который мне указывал чарльз в настройках прокси-сервера, был неверным. Чтобы решить, я в конечном итоге собираюсь ifconfig
в терминале и пробуя разные IP-адреса (перечислены рядом с inet
) в порту 8888
для текущих активных соединений