Esempio n. 1
0
 private void Renegotiate(SSL.Client.SSLConnection conn)
 {
     conn.LoadNewClientCredentials(null);
 }
Esempio n. 2
0
        internal Response Get(IPEndPoint ipEndpoint, string request)
        {
            m_response = new Response();

            m_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                m_sock.Connect(ipEndpoint);
            }
            catch (SocketException ex)
            {
                Console.WriteLine("Connection Failed. Cause: " + ex.Message);
                return(m_response);
            }

            SSL.Client.SSLConnection conn = new SSL.Client.SSLConnection();

            conn.DoWrite            = new SSL.Client.WriteSSL(Send);
            conn.DoPlainData        = new SSL.Client.PlainData(OnPlainData);
            conn.DoRenegotiate      = new SSL.Client.NewCertificate(Renegotiate);
            conn.DoServerCertVerify = new SSL.Client.VerifyServCert(ServerCertVerify);
            conn.DoHandShakeSuccess = new SSL.Client.HandShakeSuccess(HandShakeSuccess);

            try
            {
                conn.InitiateHandShake(ipEndpoint.Address.ToString(), null, SSL.Common.Misc.SecurityProviderProtocol.PROT_TLS1, Guid.Empty);
                int    MaxChunkSize = conn.MaxInitialChunkSize;
                byte[] data         = new Byte[MaxChunkSize];
                int    ActualSize   = 0;
                while (!m_Connected)
                {
                    if (!m_sock.Poll(1000 * 1000 * 4, SelectMode.SelectRead)) //give 4 secs for server to respond
                    {
                        Console.WriteLine("Server failed to respond to SSL HandShake.");
                        return(response);
                    }
                    ActualSize = m_sock.Receive(data, 0, MaxChunkSize, SocketFlags.None);
                    conn.DecryptData(data, ActualSize, Guid.Empty);
                }


                string Request = request;

                data = System.Text.ASCIIEncoding.ASCII.GetBytes(Request);
                conn.EncryptSend(data, data.Length, Guid.Empty);
                MaxChunkSize = conn.MaxDataChunkSize;
                data         = new Byte[MaxChunkSize];
                while (m_CurrBodyLen != m_BodyLen)
                {
                    try
                    {
                        ActualSize = m_sock.Receive(data, 0, MaxChunkSize, SocketFlags.None);
                        conn.DecryptData(data, ActualSize, Guid.Empty);
                    }
                    catch (SSL.Common.Exceptions.SSLServerDisconnectedException)
                    {
                        Console.WriteLine("Connection lost.");
                    }
                }


                conn.Disconnect(Guid.Empty);
                conn.Dispose();
            }
            catch (SocketException ex)
            {
                //Console.WriteLine(ex.Message);
            }
            catch (SSL.Common.Exceptions.SSLException ex)
            {
                //Console.WriteLine(ex.Message);
            }
            m_BodyLen     = -1;
            m_CurrBodyLen = 0;
            m_Data        = "";
            m_Connected   = false;
            return(m_response);
        }
Esempio n. 3
0
        internal Response Get(IPEndPoint ipEndpoint, string request)
        {
            m_response = new Response();

                m_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    m_sock.Connect(ipEndpoint);
                }
                catch(SocketException ex)
                {
                    Console.WriteLine("Connection Failed. Cause: " + ex.Message);
                    return m_response;
                }

                SSL.Client.SSLConnection conn = new SSL.Client.SSLConnection();

                conn.DoWrite = new SSL.Client.WriteSSL(Send);
                conn.DoPlainData = new SSL.Client.PlainData(OnPlainData);
                conn.DoRenegotiate = new SSL.Client.NewCertificate(Renegotiate);
                conn.DoServerCertVerify = new SSL.Client.VerifyServCert(ServerCertVerify);
                conn.DoHandShakeSuccess = new SSL.Client.HandShakeSuccess(HandShakeSuccess);

                try
                {
                    conn.InitiateHandShake(ipEndpoint.Address.ToString(), null, SSL.Common.Misc.SecurityProviderProtocol.PROT_TLS1, Guid.Empty);
                    int MaxChunkSize = conn.MaxInitialChunkSize;
                    byte[] data = new Byte[MaxChunkSize];
                    int ActualSize=0;
                    while(!m_Connected)
                    {
                        if(!m_sock.Poll(1000*1000*4, SelectMode.SelectRead)) //give 4 secs for server to respond
                        {
                            Console.WriteLine("Server failed to respond to SSL HandShake.");
                            return response;
                        }
                        ActualSize = m_sock.Receive(data, 0, MaxChunkSize, SocketFlags.None);
                        conn.DecryptData(data, ActualSize, Guid.Empty);
                    }

                    string Request = request;

                    data = System.Text.ASCIIEncoding.ASCII.GetBytes(Request);
                    conn.EncryptSend(data, data.Length, Guid.Empty);
                    MaxChunkSize = conn.MaxDataChunkSize;
                    data = new Byte[MaxChunkSize];
                    while(m_CurrBodyLen != m_BodyLen)
                    {
                        try
                        {
                            ActualSize = m_sock.Receive(data, 0, MaxChunkSize, SocketFlags.None);
                            conn.DecryptData(data, ActualSize, Guid.Empty);
                        }
                        catch(SSL.Common.Exceptions.SSLServerDisconnectedException)
                        {
                            Console.WriteLine("Connection lost.");
                        }
                    }

                    conn.Disconnect(Guid.Empty);
                    conn.Dispose();
                }
                catch(SocketException ex)
                {
                    //Console.WriteLine(ex.Message);
                }
                catch(SSL.Common.Exceptions.SSLException ex)
                {
                    //Console.WriteLine(ex.Message);
                }
                m_BodyLen = -1;
                m_CurrBodyLen = 0;
                m_Data = "";
                m_Connected = false;
                return m_response;
        }