Это был старый вопрос, но для полноты здесь приводится другой ответ.
Я реализовал прокси-сервер перехвата HTTP / HTTPS в Ruby, проект размещен в github .
Случай HTTP очевиден, перехват HTTPS осуществляется через сервер HTTPS, который действует как обратный прокси-сервер (и обрабатывает рукопожатие TLS).Т.е.
Client(e.g. Browser) <--> Proxy1 <--> HTTPS Reverse Proxy <--> Target Server
Как уже упоминал Валько, когда клиент подключается к HTTPS-серверу через прокси-сервер, вы увидите поток зашифрованных байтов (поскольку SSL обеспечивает сквозное шифрование).Но не все зашифровано, прокси-сервер должен знать, кому должен быть направлен поток байтов, поэтому клиент отправляет запрос CONNECT host:port
(который является телом запроса потока SSL).
Хитростьздесь первый прокси перенаправит этот запрос на HTTPS Reverse Proxy
вместо реального целевого сервера.Этот обратный прокси-сервер будет обрабатывать согласование SSL с клиентом, иметь доступ к расшифрованным запросам и отправлять копии (необязательно измененные версии) этих запросов на реальный целевой сервер, действуя как обычный клиент.Он получит ответы от целевого сервера, (необязательно) изменит ответы и отправит их обратно клиенту.