Самостоятельное хост-консольное приложение с поддержкой https (без веб-API, без SignalR)

С помощью SslStream и сокета я разработал веб-сервер https с нуля. Я могу применить сертификат к потоку из кода C# и обрабатывать запросы.

Однако я не понял, как это сделать с Оуэном. Кто-нибудь знает, как привязать сертификат к консольному приложению с собственным хостом?

Пример:

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

Пожалуйста, обратитесь к существующему коду Owin ниже для деталей:

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;
        }


    }

}

2 ответа

Самостоятельно размещающим приложениям нужно просто привязать к нужным URL-адресам в коде, а сопоставления сертификатов следует выполнять отдельно через API-интерфейс Windows HTTP.

netsh http show sslcert может показать вам существующие сопоставления, а Jexus Manager предоставляет пользовательский интерфейс.

Это зависит от сервера. Вот как это сделать с помощью HttpListener: http://katanaproject.codeplex.com/wikipage?title=Selfhosting&referringTitle=Documentation

Другие вопросы по тегам