Mitmproxy: Ошибки сертификации с вышестоящим сервером

#mitmproxy

Вопрос:

Я пытаюсь разделить свой сетевой трафик на два потока с помощью Mitmproxy. Поэтому у меня есть один входящий прокси-сервер, который принимает трафик с моего iPhone, и я использую два дополнительных прокси-сервера, на которые перенаправляется трафик. Я начинаю три примера так:

mitmproxy —режим вверх по течению 127.0.0.1:8083 -с mitmRoot.py —ssl-небезопасно

mitmproxy —прослушивание-порт 8083 —ssl небезопасен

mitmproxy —прослушивание-порт 8082 —ssl-небезопасно

Я использую следующий, очень простой скрипт на Python для маршрутизации трафика:

 class mitmRoot:

    def request(self, flow: mitmproxy.http.HTTPFlow):
        if "github.com" in str(flow.request.url):
            flow.live.change_upstream_proxy_server(("localhost", 8082))

addons = [
    mitmRoot()
]
 

Теперь все работает отлично, если я использую только один прокси-сервер без какого-либо восходящего прокси-сервера. Я установил сертификат на телефон и могу открыть любой веб-сайт в браузере

Однако, если я добавлю два вышестоящих прокси, я увижу, что начну видеть ошибки сертификации, в основном для материалов, связанных с iPhone:

 clientdisconnect
clientconnect
Certificate verification error for gateway.icloud.com: self signed certificate in certificate chain (errno: 19, depth: 1)
Ignoring server verification error, continuing with connection
Client Handshake failed. The client may not trust the proxy's certificate for gateway.icloud.com.
 

Интересно, что я все еще могу устанавливать соединения с веб-сайтами, за исключением тех, где я переключаю вышестоящий сервер. Поэтому в этом примере я не могу открыть github.com.

Прокси-сервер ввода теперь выдает ошибки сертификата для github.com кроме того, в то время как вышестоящий прокси-сервер, который должен получать трафик (тот, что на порту 8082), вообще не видит никакого трафика, я также вижу некоторые сообщения clientconnect/ clientdisconnect в потоке:

 https://github.com/
clientconnect
clientconnect
Certificate verification error for github.com: self signed certificate in certificate chain (errno: 19, depth: 1)
Ignoring server verification error, continuing with connection
Certificate verification error for keyvalueservice.icloud.com: self signed certificate in certificate chain (errno: 19, depth: 1)
Ignoring server verification error, continuing with connection
Client Handshake failed. The client may not trust the proxy's certificate for keyvalueservice.icloud.com
 

Я пробовал разные параметры конфигурации, например «—set add_upstream_certs_to_client=true», но до сих пор я не могу настроить это правильно.

Похоже, что есть какая-то проблема с конфигурацией, но я пока не понимаю, почему это происходит.

Спасибо Вам за вашу помощь!

Комментарии:

1. Собственные службы Apple часто используют закрепление сертификатов (особенно те, которые используют «самозаверяющие» сертификаты mitmproxy), поэтому, насколько мне известно, единственный способ разрешить такой трафик-обойти такие хосты с помощью этой --ignore-hosts опции.

2. Это то, о чем я тоже думал, но тогда почему это работает с одним экземпляром прокси-сервера без подключенных вышестоящих прокси-серверов?