Я использую 2 прокси для перехвата связи между моим телефоном и моим сервером . Вот моя топология:
телефон -> прокси 1 -> прокси 2 -> сервер
прокси1 слушает порт 8080, прокси 2 слушает порт 8080, но я перенаправляю все, что он получает, на порты 80 и 443, наконец, мой сервер прослушивает порт 443.
IP-адрес телефона: 192.168.10.199
IP-адрес proxy2: 192.168.10.246
IP-адрес сервера: 192.168. 10.211
Все устройства, которые я использую, находятся в моей локальной сети.
Первый прокси установлен на моем телефоне (Android), и он позволяет мне направлять весь трафик, поступающий с моего телефона, на второй прокси (когда я использую второй прокси отдельно, он не не перехватывают весь трафик, потому что некоторые приложения предпочитают напрямую связываться с сервером, не проходя через прокси, даже если мой телефон рутирован).
Я использую Wireshark для визуализации связи между моим телефоном и сервером на втором прокси-сервере mitmproxy . Я установил сертификат на свой телефон и вот что я получаю:
192.168.10.199 192.168.10.246 POST / message HTTP / 1.1
192.168.10.199 - это IP-адрес моего телефона, а 192.168.10.246 - это IP-адрес прокси-сервера 2, поэтому прокси-сервер 2 получает информацию с моего телефона, но когда он пытается передать на сервер, я получаю следующее:
192.168.10.246 192.168.10.199 HTTP / 1.1 502 Плохо Gateway (text / html), Alert (Уровень: Предупреждение, Описание: Close Notify)
Вот именно то сообщение, которое я получаю в Wireshark:
<html>
<head>
<title>502 Bad Gateway</title>
</head>
<body>
<h1>502 Bad Gateway</h1>
<p>TlsProtocolException("Cannot establish TLS with 192.168.10.211:443 (sni: None): TlsException('Cannot validate certificate hostname without SNI',)",)</p>
</body>
</html>
Я попытался выполнить тот же запрос POST https: //192.168. 10.211: 443 / message
в Postman, и я получаю другое сообщение:
Не удалось получить ответ При подключении к https://192.168.10.211 произошла ошибка: 443 / сообщение .
Почему это могло произойти:
Серверу не удалось отправить ответ:
Убедитесь, что серверная часть работает правильно Самоподписанные сертификаты SSL блокируются:
Исправить отключив «Проверка сертификата SSL» в разделе «Настройки»> «Общие»
. Прокси-сервер настроен неправильно
. Убедитесь, что прокси-сервер настроен правильно в «Настройки»> «Прокси-сервер
» Тайм-аут запроса:
Изменить время ожидания запроса в «Настройки»> «Общие»
Я пытаюсь понять, что именно происходит? Я предполагаю, что сертификат должен быть установлен на первом прокси (который установлен на моем телефоне), а не на самом телефоне, и поэтому я получаю исключение, указанное выше. Я прав?
Похоже, это ошибка на стороне сервера, а не ошибка устройства.
Подтвердили ли вы, что веб-сервер работает на порту 443 и доступен без прокси?
Вот некоторая дополнительная информация о фактическом коде ошибки 502. https://www.lifewire.com/502-bad-gateway-error-explained-2622939
Сначала я подумал, что проблема с прокси-сервером 2 ...
Должно быть, ваш прокси-сервер 1 пересылает запросы без поддержки заголовков хоста. Настройте его для поддержки заголовков хоста.
Если вы предоставите, что это за прокси, я мог бы обновить свой ответ, указав правильную конфигурацию.
Например, для Apache вы можете использовать директиву ProxyPreserveHost
. См. документы .
Для mitmproxy это keep_host_header
, описанный там