建立自己的代理https代理方法“连接” C#sslStream

时间:2019-11-13 16:56:16

标签: c# ssl https proxy

我正在尝试为ed建立代理服务器。目的。

有一些步骤:

  1. 绑定和监听主机端口
  2. 在绑定接口的FireFox中设置代理
  3. 对于每个通过CONNECT方法初​​始化的连接,该连接存储了特殊的TcpClient(类SocketUnitPoola),并将从同一端口接收的下一个味精发送到在第一个连接中选择的他的主机
  4. 不加解释地将所有数据发送给客户

我的问题是-每个https页面中的浏览器打印错误“ SSL_ERROR_RX_MALFORMED_ALERT”。 这种方法正确吗?也许是最后一个...未安装证书。

 int UnitN = SearchById_n(IncomPort);
            if (UnitN != -1)
            {//Old connection
                Console.WriteLine("Old handshake");
                NetworkStream requestStream = SocketPool[UnitN].tcpClient.GetStream();



                requestStream.Write(Data, 0, Data.Length);





                int received = 0;
                int part = 0;
                byte[] buffer = new byte[buffer_size];

                do
                {
                    part = 0;
                    part = requestStream.Read(buffer, received, buffer_size - received);
                    received += part;
                }
                while (requestStream.DataAvailable);



                Array.Resize(ref buffer, received);
                return buffer;
            }
            else
            {//New Connection
                Head ReqHead = new Head(Srequest);
                IPHostEntry ipHostInfo = Dns.GetHostEntry(ReqHead.host);
                IPAddress ipAddress = ipHostInfo.AddressList[0];
                //IPEndPoint remoteEP = new IPEndPoint(ipAddress, ReqHead.port);



                Console.WriteLine("New handshake");

                SslStream sslStream = null;
                NetworkStream requestStream = null;
                TcpClient requestClient = new TcpClient();




                requestClient.Connect(ReqHead.host, ReqHead.port);
                requestStream = requestClient.GetStream();
                sslStream = new SslStream(requestStream, false, (x1, x2, x3, x4) => true);
                sslStream.AuthenticateAsClient(ReqHead.host);


                lock (locker)
                    SocketPool.Add(new SocketPoolUnit()
                    {
                        tcpClient = requestClient,
                        netStream = requestStream,
                        sslStream = sslStream,
                        Id = IncomPort,
                        TTL = 999
                    });




                string sslResponse = "HTTP/1.0 200 Connection established\r\n\r\n";
                resp = Encoding.UTF8.GetBytes(sslResponse);
                return resp;
            }

0 个答案:

没有答案