Guest User

Untitled

a guest
Oct 26th, 2011
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.14 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net.Sockets;
  5. using System.Threading;
  6.  
  7. using Rebex.Net;
  8. using Rebex.Security;
  9. using Rebex.Security.Certificates;
  10.  
  11. namespace TlsTestApp
  12. {
  13.     class Program
  14.     {
  15.         public class MyCertVerifier : ICertificateVerifier
  16.         {
  17.             public TlsCertificateAcceptance Verify(TlsSocket socket, string commonName, CertificateChain certificateChain)
  18.             {
  19.                 Console.WriteLine("---------------------- CERT VERIFIER ----------------------");
  20.                 Console.WriteLine("CN: " + commonName);
  21.                 Console.WriteLine("Chain cnt: " + certificateChain.Count);
  22.                 Console.WriteLine("VALIDATION RESULT: " + certificateChain.Validate(commonName, ValidationOptions.AllowUnknownCa).Valid);
  23.                 Console.WriteLine("VALIDATION STATUS: " + certificateChain.Validate(commonName, ValidationOptions.AllowUnknownCa).Status);
  24.  
  25.                 for(int i = 0; i < certificateChain.Count; i++)
  26.                     Console.WriteLine("* Chain " + i + ": " + certificateChain[i].GetCommonName());
  27.                 Console.WriteLine("---------------------- END VERIFIER ----------------------");
  28.  
  29.                 return TlsCertificateAcceptance.Accept;
  30.             }
  31.         }
  32.  
  33.         private static byte[] recvBuffer = new byte[4096];
  34.  
  35.         static void AsyncRecv(IAsyncResult ar)
  36.         {
  37.             Console.Write("RECV:");
  38.  
  39.             try
  40.             {
  41.                 TlsSocket s = (TlsSocket)ar.AsyncState;
  42.                 int bytesRecv = s.EndReceive(ar);
  43.  
  44.                 if (bytesRecv == 0)
  45.                     throw new Exception("end of stream");
  46.  
  47.                 Console.Write(Encoding.ASCII.GetString(recvBuffer, 0, bytesRecv));
  48.  
  49.                 // Receive more
  50.                 s.BeginReceive(recvBuffer, 0, recvBuffer.Length, SocketFlags.None, new AsyncCallback(AsyncRecv), s);
  51.             }
  52.             catch (Exception ex)
  53.             {
  54.                 Console.Error.WriteLine("Error AsyncRecv: " + ex.Message);
  55.             }
  56.         }
  57.  
  58.         static void Main(string[] args)
  59.         {
  60.             try
  61.             {
  62.                 String hostName = "www.digicert.com";
  63.  
  64.                 TlsParameters tlsPar = new TlsParameters();
  65.                 tlsPar.AllowedSuites = TlsCipherSuite.Secure; // Only secure encryption allowed
  66.                 tlsPar.CertificateVerifier = new MyCertVerifier();
  67.                 tlsPar.Entity = TlsConnectionEnd.Client;
  68.                 tlsPar.Version = TlsVersion.TLS10;
  69.                 tlsPar.CommonName = hostName;
  70.  
  71.                 Console.WriteLine("* Connecting to https://" + hostName);
  72.                 TlsSocket secureSocket = new TlsSocket(AddressFamily.InterNetwork);
  73.                 secureSocket.Parameters = tlsPar;
  74.                 secureSocket.Connect(hostName, 443);
  75.                 secureSocket.Negotiate(); // Enable SSL/TLS
  76.  
  77.                 Console.WriteLine("* Connected successfully at " + DateTime.Now);
  78.  
  79.                 Console.WriteLine("CipherAlgorithm: " + secureSocket.Cipher.CipherAlgorithm);
  80.                 Console.WriteLine("EffectiveKeySize: " + secureSocket.Cipher.EffectiveKeySize);
  81.                 Console.WriteLine("KeyExchangeAlgorithm: " + secureSocket.Cipher.KeyExchangeAlgorithm);
  82.                 Console.WriteLine("KeySize: " + secureSocket.Cipher.KeySize);
  83.                 Console.WriteLine("Protocol: " + secureSocket.Cipher.Protocol);
  84.                 Console.WriteLine("Suite ID: " + secureSocket.Cipher.Suite);
  85.  
  86.                 // HTTP req
  87.                 string request = "GET / HTTP/1.0\r\n" +
  88.                     "Accept: */*\r\n" +
  89.                     "User-Agent: SecureSocket Component\r\n" +
  90.                     "Host: " + hostName + "\r\n" +
  91.                     "\r\n";
  92.  
  93.                 byte[] b = Encoding.ASCII.GetBytes(request);
  94.                 secureSocket.Send(b);
  95.  
  96.                 Console.WriteLine("--------------- WAITING FOR RESPONSE ---------------");
  97.  
  98.                 //////// Async
  99.                 secureSocket.BeginReceive(recvBuffer, 0, recvBuffer.Length, SocketFlags.None,
  100.                     new AsyncCallback(AsyncRecv), secureSocket);
  101.  
  102.                 Thread.Sleep(10000);
  103.                 //////// END async
  104.  
  105.                 //////// Synchronous - works!
  106.                 //Console.Write("RECV:");
  107.                 //int bytesReceived;
  108.                 //do
  109.                 //{
  110.                 //    bytesReceived = secureSocket.Receive(recvBuffer, SocketFlags.None);
  111.                 //    Console.Write(Encoding.ASCII.GetString(recvBuffer, 0, bytesReceived));
  112.                 //} while (bytesReceived > 0);
  113.                 //////// END synchronous
  114.  
  115.                 try
  116.                 {
  117.                     Console.WriteLine("\nShutting down after 10 sec");
  118.                     secureSocket.Shutdown(SocketShutdown.Both);
  119.                 }
  120.                 catch (Exception)
  121.                 {
  122.                 }
  123.  
  124.                 secureSocket.Close();
  125.             }
  126.             catch (Exception ex)
  127.             {
  128.                 Console.WriteLine("ERROR: " + ex.Message);
  129.                 Console.WriteLine(ex.StackTrace);
  130.             }
  131.         }
  132.     }
  133. }
  134.  
  135.  
Advertisement
Add Comment
Please, Sign In to add comment