Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Owin self host console application with https support (no web api, no SignalR)

With SslStream and socket, I've developed a https web server from scratch. I can apply a certificate to the stream from C# code and deal with the requests.

However, I didn't figure out how to do this with Owin. Does any one know how to bind a certificate to a self hosted console application?

Example:

// Bind the below certificate to Owin host
var certificate = new X509Certificate2("server.pfx", "password");

Please refer to the existing Owin host code below for details:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin.Hosting;
using AppFunc = System.Func<System.Collections.Generic.IDictionary<string, object>, System.Threading.Tasks.Task>;

namespace Owin.Startup
{
    class Program
    {
        static void Main(string[] args)
        {
            int port = 8888;
            string url = $"http://localhost:{port}";
            using (WebApp.Start<Startup>(url))
            {
                Console.WriteLine($"Hosted: {url}");
                Console.ReadLine();
            }
        }
    }

    public class Startup
    {
        private IAppBuilder app;
        public void Configuration(IAppBuilder app)
        {
#if DEBUG
            app.UseErrorPage();
#endif

            app.Use(new Func<AppFunc, AppFunc>(next => (async env =>
            {
                Console.WriteLine("Begin Request");
                foreach (var i in env.Keys)
                {
                    Console.WriteLine($"{i}\t={(env[i] == null ? "null" : env[i].ToString())}\t#\t{(env[i] == null ? "null" : env[i].GetType().FullName)}");
                }
                if (next != null)
                {
                    await next.Invoke(env);
                }
                else
                {
                    Console.WriteLine("Process Complete");
                }
                Console.WriteLine("End Request");
            })));

            app.UseWelcomePage("/");

            this.app = app;
        }


    }

}
like image 564
mind1n Avatar asked Nov 19 '15 07:11

mind1n


1 Answers

Owin self hosting applications just need to bind to the proper URLs in code, while the certificate mappings should be done separately via Windows HTTP API.

netsh http show sslcert can show you the existing mappings, and Jexus Manager provides the UI.

like image 182
Lex Li Avatar answered Sep 28 '22 12:09

Lex Li