Сбой рукопожатия из-за непредвиденного формата пакета.когда вызов SSeStreacm.AuthenticateAsServer () - PullRequest
0 голосов
/ 28 ноября 2018

Привет! Я пытаюсь создать прокси-приложение в Windows с помощью c #, я создаю приложение, которое меняет настройки прокси-сервера, чтобы зацикливаться и получать веб-запросы из браузера. Сначала примите входящие сокеты, затем получите поток SSl на следующем шаге и попытайтесь выполнить AuthenticateAsServer.для проверки подлинности нужен X509Certificate, я пытаюсь создать много сертификатов и использовать их, но при вызове функции проверки подлинности выбрасывать «Рукопожатие не удалось из-за неожиданного формата пакета» Исключение.когда удаляете SslStream и используете сетевой поток, получите запрос https, но при попытке отправить ответ в браузер, браузер много раз отправляет запрос и показывает сообщение, содержащее «TLS Security…». пожалуйста, помогите мне.

IPEndPoint ServerEndPoint = new IPEndPoint(ServerHostEntry.AddressList[0], 36900);

        ////Server2Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
        ////Server2Socket.Bind(ServerEndPoint);
        ////Server2Socket.Listen(100);
        ////Server2Socket.BeginAccept(AccepetSocketCallBack, ServerSocket);
        ServerSocket = new TcpListener(ServerEndPoint);
        ServerSocket.Start(100);
        Running = true;
        ServerSocket.BeginAcceptTcpClient(AccepetSocketCallBack, ServerSocket);
private void AccepetSocketCallBack(IAsyncResult ar)
    {
        if(Running)
        {
            //Socket E = Server2Socket.EndAccept(ar);
            //byte[] Data = new byte[1024 * 100];
            //E.Receive(Data, SocketFlags.None);
            //string Str = Encoding.ASCII.GetString(Data);
            //Server2Socket.BeginAccept(AccepetSocketCallBack, Server2Socket);
            ClientClass NewClient = new ClientClass(MainWindow.ServerAddress, 32138, Clients.Count);
            NewClient.ClientSocket = ServerSocket.EndAcceptTcpClient(ar);
            NewClient.ClientSream = NewClient.ClientSocket.GetStream();
            NewClient.InitialSocket();
            //Clients.Add(NewClient);
            ServerSocket.BeginAcceptTcpClient(AccepetSocketCallBack, ServerSocket);
        }

    }
 public void InitialSocket()
    {
        try
        {


            X509Store store = new X509Store(StoreName.My , StoreLocation.LocalMachine);
            store.Open(OpenFlags.MaxAllowed);
            S = new SslStream(ClientSream, false);
            S.AuthenticateAsServer(store.Certificates[0] , false , System.Security.Authentication.SslProtocols.Tls12 , true);
            S.BeginRead(RecivedDataContiner, 0, RecivedDataContiner.Length, ReciveCallBack, S);
        }
        catch(Exception E)
        {
            ClientSream.BeginRead(RecivedDataContiner, 0, RecivedDataContiner.Length, ReciveCallBack, ClientSream);
        }
        //ClientSream.BeginRead(RecivedDataContiner,0, RecivedDataContiner.Length , ReciveCallBack, ClientSream);
    }

Я пытаюсьиспользуйте многие сертификаты, такие как localhost Create, makecert.exe, сертификат IIS, ssl-сертификат моего веб-сайта, x509Store и openssl и… но в любое время получите исключение, указанное выше.Я тестирую MSDN Пример, но тот же.

...