Я использую 2 прокси для перехвата связи между моим телефоном и моим сервером. Вот моя топология:
phone --> proxy 1 --> proxy 2 --> server
proxy1 слушает порт 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 Bad Gateway (text/html), Alert (Level: Warning, Description: 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
на почтальоне, и сообщение, которое я получаю, не то же самое:
Не удалось получить ответ Произошла ошибка при подключении к https://192.168.10.211:443/message.
Почему это могло произойти:
Сервер не смог отправить ответ:
Убедитесь, что серверная часть работает правильно. Самозаверяющие SSL-сертификаты блокируются:
Исправьте это, отключив проверку сертификата SSL в Настройках> Общие.
Прокси настроен неправильно
Убедитесь, что прокси настроен правильно в Настройки> Прокси.
Тайм-аут запроса:
Изменить время ожидания запроса в Настройки> Общие
Я пытаюсь понять, что именно происходит? Я предполагаю, что сертификат должен быть установлен на первом прокси (который установлен на моем телефоне), а не на самом телефоне, и поэтому я получаю исключение выше. Я прав?
Сначала я думал, что проблема в Proxy 2 ...
Должно быть, ваш прокси-сервер 1 пересылает запросы без поддержки заголовков хоста. Настройте его для поддержки заголовков хоста.
Если бы вы предоставили, что это за прокси, я мог бы обновить свой ответ, указав правильную конфигурацию.
Например, для Apache вы можете использовать ProxyPreserveHost
директива. Увидеть документы.
Для mitmproxy это keep_host_header
, описал там
Похоже, это ошибка на стороне сервера, а не ошибка конкретного устройства.
Подтвердили ли вы, что веб-сервер работает на порту 443 и доступен без прокси?
Вот еще немного информации о фактическом коде ошибки 502. https://www.lifewire.com/502-bad-gateway-error-explained-2622939