Создание поддержки HTTPS на прокси-сервере C #

Я создаю прокси-сервер на C #, и я пытаюсь понять, как поддерживать запросы HTTPS, и читать их. Можете ли вы предложить какие-либо статьи, руководства или проекты с открытым исходным кодом, где я могу узнать больше о том, как реализовать эту функцию?


person webly    schedule 21.08.2009    source источник


Ответы (1)


Если под «прочитать их» вы имеете в виду «расшифровать содержимое запроса», ответ будет «Вы не можете». То, что вы описываете, - это так называемая «атака человека посередине» (MITM). Очевидно, что SSL от этого защищен.

Теперь, если у вас есть контроль над клиентами, использующими ваш прокси (какая-то корпоративная среда или вы создаете конкурента Fiddler), вы можете нарушить SSL, заставив клиентов доверять вашим сертификатам, а затем реализовать свой MITM, используя стандартную криптографию .NET. API.

PS. Отличный пример такого подхода можно найти в Fiddler with Reflector. :)

person user8032    schedule 22.08.2009
comment
А еще лучше просто используйте Fiddler. www.fiddler2.com/fiddler/dev/ - person EricLaw; 23.08.2009
comment
Было бы полезно, если бы вы точно описали свои потребности. Например, почему вы пишете прокси вместо сравнительно простого расширения браузера? Я не уверен, что означает статистика о том, как долго SSL-соединение тоже означает. - person EricLaw; 25.08.2009
comment
В предыдущем посте тоже была опечатка. Мне просто нужно вычислить время, необходимое для установления связи SSL с сервером для вызовов HTTPS, исходящих от объектов, отображаемых в элементе управления webrowsercontrol. В настоящее время я полагаюсь на приложение Passthrough, чтобы получить время для каждого временного компонента запроса, но проблема в том, что вы не можете отличить обычное время подключения от времени установления связи SSL. Вот почему я попробовал прокси-маршрут, но это проблема с сертификатами. Может быть, есть что-то очевидное и более простое, чего я не вижу. - person webly; 25.08.2009
comment
Вы хотите иметь возможность отслеживать накладные расходы SSL в производственной среде или вам просто нужен номер сейчас? Во втором случае можно просто измерить время звонка с SSL и без него? (Тогда разница будет в накладных расходах SSL). В первом случае, я думаю, вам придется написать много кода (.net даже сообщает вам, сколько времени занимает рукопожатие SSL, если вы используете классы HTTP? Если нет, похоже, вам придется создавать ваш собственный уровень HTTP поверх необработанного TCP) - person user8032; 26.08.2009