예제 #1
0
        static internal void StartListener(string _serverCert, string _serverKey, string serverCA, string _clientCert, string _clientKey)
        {
            // note that the programmatic cert creation and installation didn't work so did this -
            // makecert.exe - r - a sha1 - n CN = localhost - sky exchange - pe - b 01 / 01 / 2000 - e 01 / 01 / 2050 - ss my
            // then this
            // C:\Repos\RIoT Development\Utlilities\RIoTUtils\bin\Debug\Certs>netsh http add sslcert ipport=0.0.0.0:5556 appid={20a30499-7f02-446f-8716-e85fcdbb0ce4} certhash=360e6b474436076ff6cca4b1281fda021c276dbb
            // SSL Certificate successfully added



            // we need to add the server cert to the store for HttpListener to use it
            string serverPfxFile = "ServerCert.PFX";

            Helpers.MakePFXFile(_serverCert, _serverKey, serverPfxFile, null);
            Helpers.DeleteCertsByIssuer("MSR_TEST");

            Helpers.InstallCert(serverCA);
            Helpers.InstallCert(serverPfxFile);
            Helpers.SetCertForPort(serverPfxFile, 5556);

            string clientPfxFile = "ClientCert.PFX";

            Helpers.MakePFXFile(_clientCert, _clientKey, clientPfxFile, null);



            // ‎9970e392d44f8d08c158660f1a0b05838f6201f0

            // ‎360e6b474436076ff6cca4b1281fda021c276dbb
            SSLValidator.OverrideValidation();

            var listener = new HttpListener();

            listener.Prefixes.Add("https://127.0.0.1:5556/ABC/");
            listener.Start();
            Console.WriteLine("Listening...");


            SslTcpClient.RunClient(_clientCert, _clientKey);

            /*
             * // make a request
             * //You must change the path to point to your .cer file location.
             * X509Certificate Cert = X509Certificate.CreateFromCertFile("ClientCert.PFX");
             * // Handle any certificate errors on the certificate from the server.
             * // You must change the URL to point to your Web server.
             * HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://127.0.0.1:5556/ABC/123");
             * Request.ClientCertificates.Add(Cert);
             * Request.UserAgent = "Client Cert Sample";
             * Request.Method = "GET";
             * var responseFromServer = Request.GetResponseAsync();
             * //string respx = responseFromServer.Result.ToString();
             *
             */

            var context = listener.GetContext();
            HttpListenerRequest request = context.Request;
            // Obtain a response object.
            HttpListenerResponse response = context.Response;

            var cert = request.GetClientCertificate();

            // Construct a response.
            string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";

            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            // Get a response stream and write the response to it.
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            // You must close the output stream.
            output.Close();
            listener.Stop();
        }