private void Renegotiate(SSL.Client.SSLConnection conn) { conn.LoadNewClientCredentials(null); }
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); }
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; }