Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Net.Sockets;
- using System.Threading;
- using Rebex.Net;
- using Rebex.Security;
- using Rebex.Security.Certificates;
- namespace TlsTestApp
- {
- class Program
- {
- public class MyCertVerifier : ICertificateVerifier
- {
- public TlsCertificateAcceptance Verify(TlsSocket socket, string commonName, CertificateChain certificateChain)
- {
- Console.WriteLine("---------------------- CERT VERIFIER ----------------------");
- Console.WriteLine("CN: " + commonName);
- Console.WriteLine("Chain cnt: " + certificateChain.Count);
- Console.WriteLine("VALIDATION RESULT: " + certificateChain.Validate(commonName, ValidationOptions.AllowUnknownCa).Valid);
- Console.WriteLine("VALIDATION STATUS: " + certificateChain.Validate(commonName, ValidationOptions.AllowUnknownCa).Status);
- for(int i = 0; i < certificateChain.Count; i++)
- Console.WriteLine("* Chain " + i + ": " + certificateChain[i].GetCommonName());
- Console.WriteLine("---------------------- END VERIFIER ----------------------");
- return TlsCertificateAcceptance.Accept;
- }
- }
- private static byte[] recvBuffer = new byte[4096];
- static void AsyncRecv(IAsyncResult ar)
- {
- Console.Write("RECV:");
- try
- {
- TlsSocket s = (TlsSocket)ar.AsyncState;
- int bytesRecv = s.EndReceive(ar);
- if (bytesRecv == 0)
- throw new Exception("end of stream");
- Console.Write(Encoding.ASCII.GetString(recvBuffer, 0, bytesRecv));
- // Receive more
- s.BeginReceive(recvBuffer, 0, recvBuffer.Length, SocketFlags.None, new AsyncCallback(AsyncRecv), s);
- }
- catch (Exception ex)
- {
- Console.Error.WriteLine("Error AsyncRecv: " + ex.Message);
- }
- }
- static void Main(string[] args)
- {
- try
- {
- String hostName = "www.digicert.com";
- TlsParameters tlsPar = new TlsParameters();
- tlsPar.AllowedSuites = TlsCipherSuite.Secure; // Only secure encryption allowed
- tlsPar.CertificateVerifier = new MyCertVerifier();
- tlsPar.Entity = TlsConnectionEnd.Client;
- tlsPar.Version = TlsVersion.TLS10;
- tlsPar.CommonName = hostName;
- Console.WriteLine("* Connecting to https://" + hostName);
- TlsSocket secureSocket = new TlsSocket(AddressFamily.InterNetwork);
- secureSocket.Parameters = tlsPar;
- secureSocket.Connect(hostName, 443);
- secureSocket.Negotiate(); // Enable SSL/TLS
- Console.WriteLine("* Connected successfully at " + DateTime.Now);
- Console.WriteLine("CipherAlgorithm: " + secureSocket.Cipher.CipherAlgorithm);
- Console.WriteLine("EffectiveKeySize: " + secureSocket.Cipher.EffectiveKeySize);
- Console.WriteLine("KeyExchangeAlgorithm: " + secureSocket.Cipher.KeyExchangeAlgorithm);
- Console.WriteLine("KeySize: " + secureSocket.Cipher.KeySize);
- Console.WriteLine("Protocol: " + secureSocket.Cipher.Protocol);
- Console.WriteLine("Suite ID: " + secureSocket.Cipher.Suite);
- // HTTP req
- string request = "GET / HTTP/1.0\r\n" +
- "Accept: */*\r\n" +
- "User-Agent: SecureSocket Component\r\n" +
- "Host: " + hostName + "\r\n" +
- "\r\n";
- byte[] b = Encoding.ASCII.GetBytes(request);
- secureSocket.Send(b);
- Console.WriteLine("--------------- WAITING FOR RESPONSE ---------------");
- //////// Async
- secureSocket.BeginReceive(recvBuffer, 0, recvBuffer.Length, SocketFlags.None,
- new AsyncCallback(AsyncRecv), secureSocket);
- Thread.Sleep(10000);
- //////// END async
- //////// Synchronous - works!
- //Console.Write("RECV:");
- //int bytesReceived;
- //do
- //{
- // bytesReceived = secureSocket.Receive(recvBuffer, SocketFlags.None);
- // Console.Write(Encoding.ASCII.GetString(recvBuffer, 0, bytesReceived));
- //} while (bytesReceived > 0);
- //////// END synchronous
- try
- {
- Console.WriteLine("\nShutting down after 10 sec");
- secureSocket.Shutdown(SocketShutdown.Both);
- }
- catch (Exception)
- {
- }
- secureSocket.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine("ERROR: " + ex.Message);
- Console.WriteLine(ex.StackTrace);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment