В этом проблема.
У меня есть https-запрос. Запрос отправляется как запрос SSL / TLS (не CONNECT ...., который поступает из браузера с настройкой прокси).
Мне нужно написать прокси на С#, который блокирует определенный https://foo.com/foo.htm. запрос, но пропускает через https://foo.com/anything_else.htm.
Я могу сделать это прекрасно, создав атаку MITM с новым сертификатом и т. д. и т. д.
Но теперь мне интересно, есть ли простой способ сделать это без использования атаки MITM, поскольку мне не нужно расшифровывать данные. Мне нужно знать только URI/файл.
Я могу легко просто передавать потоки, но я хочу знать, есть ли простой способ передачи потоков после того, как я прочитал URI и файл.
Я могу написать какой-нибудь причудливый код, чтобы разделить запрос tcp, и это то, что мне, возможно, придется сделать.
У кого-нибудь есть идеи, прежде чем я пойду по этому пути. Помните, что нет никакого запроса CONNECT. Просто прямой SSL/TLS.
Основная причина этого заключается в том, что это просто упрощает работу, не создавая самозаверяющих сертификатов и т. д.
Возможно, даже возможно каким-то образом использовать настоящий сертификат со стороны сервера, поскольку мне не нужно расшифровывать какие-либо данные без заголовка.
Я считаю, что сетевая сторона С# не очень хорошо документирована и немного разбросана.
Просто для справки я могу получить URI от TcpClient, используя:
IPEndPoint ipEndPoint = (IPEndPoint)clientTcpClient.Client.RemoteEndPoint;
IPAddress ipAddress = ipEndPoint.Address;
// Get the hostname.
IPHostEntry ipHostEntry = Dns.GetHostEntry(ipAddress);
String hostName = ipHostEntry.HostName;
// Get the port.
Int32 port = ipEndPoint.Port;
Но не запрошенная страница.