SSL в веб-прокси C #; как определить, является ли запрос SLL или нет? - PullRequest
2 голосов
/ 14 апреля 2009

Я создал веб-прокси с нуля (используя классы Socket и NetworkStream). Сейчас я пытаюсь реализовать поддержку SSL для него, чтобы он мог обрабатывать запросы и ответы HTTPS. У меня есть хорошее представление о том, что мне нужно делать (используя SslStream), но я не знаю, как определить, является ли запрос, полученный от клиента, SSL или нет.

Я часами искал эту тему и не смог найти подходящего решения.

После того, как я это сделаю:

TcpListener pServer = new TcpListener(localIP, port);
pServer.Start(256);
Socket a_socket = pServer.AcceptSocket();

Как узнать, нужно ли мне читать информацию, используя SslStream или NetworkStream?

Ответы [ 3 ]

3 голосов
/ 14 апреля 2009

Клиент отправит вам запрос метода CONNECT , после чего вам нужно просто перенаправить трафик.

Пример подключения:

CONNECT www.google.com:443 HTTP/1.1

После просмотра просто переключитесь в режим перенаправления данных. Вы не можете перехватывать или читать данные, поэтому вам не нужно беспокоиться о SSLStream, вы не будете к нему прикасаться.

Однако, если вы хотите использовать MITM (человек посередине), вам нужно переключиться на SSL, в противном случае просто перенаправьте все, что придет к целевому URL и порту, вот и все.

Очевидно, что при перехвате запроса браузер клиента выскочит с исключением из сертификата SSL.

0 голосов
/ 14 апреля 2009

Вам необходимо добавить поддержку для команды CONNECT.

http://www.codeproject.com/KB/IP/akashhttpproxy.aspx

0 голосов
/ 14 апреля 2009

Вот почему прокси-клиенты используют один прокси для HTTP и другой для HTTPS. Вы не можете знать, какой тип соединения вы собираетесь получать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...