Назад | Перейти на главную страницу

Невозможно проверить имя хоста сертификата без SNI

Я использую 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(&quot;Cannot establish TLS with 192.168.10.211:443 (sni: None): TlsException(&#x27;Cannot validate certificate hostname without SNI&#x27;,)&quot;,)</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