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

Я использую 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(&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 в Postman, и я получаю другое сообщение:

Не удалось получить ответ При подключении к https://192.168.10.211 произошла ошибка: 443 / сообщение .

Почему это могло произойти:

Серверу не удалось отправить ответ:

Убедитесь, что серверная часть работает правильно Самоподписанные сертификаты SSL блокируются:

Исправить отключив «Проверка сертификата SSL» в разделе «Настройки»> «Общие»

. Прокси-сервер настроен неправильно

. Убедитесь, что прокси-сервер настроен правильно в «Настройки»> «Прокси-сервер

» Тайм-аут запроса:

Изменить время ожидания запроса в «Настройки»> «Общие»

Я пытаюсь понять, что именно происходит? Я предполагаю, что сертификат должен быть установлен на первом прокси (который установлен на моем телефоне), а не на самом телефоне, и поэтому я получаю исключение, указанное выше. Я прав?

1
задан 28 May 2019 в 12:08
2 ответа

Похоже, это ошибка на стороне сервера, а не ошибка устройства.

Подтвердили ли вы, что веб-сервер работает на порту 443 и доступен без прокси?

Вот некоторая дополнительная информация о фактическом коде ошибки 502. https://www.lifewire.com/502-bad-gateway-error-explained-2622939

0
ответ дан 4 December 2019 в 02:59

Обновление

Сначала я подумал, что проблема с прокси-сервером 2 ...

Должно быть, ваш прокси-сервер 1 пересылает запросы без поддержки заголовков хоста. Настройте его для поддержки заголовков хоста.

Если вы предоставите, что это за прокси, я мог бы обновить свой ответ, указав правильную конфигурацию.

Например, для Apache вы можете использовать директиву ProxyPreserveHost . См. документы .

Для mitmproxy это keep_host_header , описанный там

0
ответ дан 4 December 2019 в 02:59

Теги

Похожие вопросы