• 在.NET 6.0上使用Kestrel配置和自定义HTTPS


    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进。

    本章是《定制ASP NET 6.0框架系列文章》的第四篇。在本章,我们将学习ASP.NET Core的Kestrel配置和自定义HTTPS,好我们开始正文。

    ASP.NET Core中,默认情况下HTTPS处于打开状态,这个不是问题,我们无需禁用它。因为如果你的服务是在防火墙后面,是属于后台服务,不对外网提供服务,启用HTTPS也是有意义的。
    通常,在Windows上,启用HTTPS所需的证书是从Windows证书存储库加载的,在Linux或Mac上,则会从证书文件上加载证书,后者更加灵活,是我比较推荐的方式。
    本章包含两个主题:

    • Kestrel简介
    • 设置Kestrel

    本文讨论的主题仍然属于ASP.NET Core的宿主(Host)层。

    技术准备

    我们通过终端生成一个ASP.NET Core MVC项目:

    dotnet new mvc -n HttpSample -o HttpSample
    

    然后用VS Code打开项目:

    cd HttpSample 
    code .
    

    Kestrel简介

    Kestrel是一个新实现的HTTP服务器,它是ASP.NET Core的托管引擎,这有别于在IIS上运行的经典的ASP.NET应用程序(在.NET Framework),据说微软的灵感来自Node.js,因为Node.js有一个名为libuv的HTTP服务器。在ASP.NET Core的第一个版本中,微软也使用了libuv,然后在其顶部添加了一个名为Kestrel的层。此时,Node.jsASP.NET Core 共享相同的HTTP服务器。

    随着.NET Core 框架的不断发展和新的.NET Socket的实现,Microsoft基于.NET Socket构建了自己的HTTP服务器,同时删除了libuv,因为libuv不可控也不属于微软,这种重新造轮子的现象在大厂司空见惯。现在,Kestrel已经发展成熟,是一个能运行ASP.NET Core应用的微软系的HTTP服务器。
    那么IIS现在的角色是什么呢?IIS充当起了反向代理,将流量转发给Kestrel并管理Kestrel进程。在Linux上,我们通常使用NGINX作为Kestrel的反向代理。

    设置Kestrel

    接下来,我们需要稍微重写默认的WebHostBuilder来设置Kestrel。使用ASP.NET Core 3.0及更高版本,Kestrel属于框架默认的配置,当然我们可以进行自定义配置。

    我们看下配置步骤:
    1.配置Kestrel

    我们先看一下在3.0-5.0版本中,如何手动添加和配置Kestrel

    {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder
                            .UseKestrel(options =>
                            {
                               //待配置
                            })
                            .UseStartup<Startup>();
                    });
        }
    

    上面的代码演示了如何在IWebHostBuilder上调用UseKestrel()方法进行配置,我们再看下.NET Core 6.0中的配置方法:

    var builder = WebApplication.CreateBuilder(args);
    
    builder.WebHost.UseKestrel(options =>
    {
        //待配置
    });
    

    UseKestrel()方法看,新旧版本没有任何区别,只是新版本的极简理念让代码更加可读。

    别忘了,我们还要引入System.Net名称空间,用以解析IPAddress

    2.配置证书

    了解了Kestrel的配置格式,我们来看下具体配置内容:

    builder.WebHost.UseKestrel(options =>
    {
        options.Listen(IPAddress.Loopback, 5000);
        options.Listen(IPAddress.Loopback,  5001,  
         listenOptions  =>
        {
            listenOptions.UseHttps("certificate.pfx","topsecret");
        });
    });
    

    UseKestrel()方法里面,我们配置了要侦听的地址和端口,对于HTTPS端口5001,我们还需要配置如何加载证书certificate.pfx

    3.创建证书

    下面要创建一个证书文件。我们打开证书存储库并导出Visual Studio创建的开发证书。它位于当前用户证书下的个人证书:

    右键点击选中项,转到“所有任务”,然后点击“导出”。在证书导出向导中,点击下一步,然后点击确定导出私钥,然后点击下一步。选择PFX格式,然后点击下一步。在这里,您需要设置密码,与上面代码中使用的密码完全相同。选择文件名和存储文件的位置,然后点击“下一步”。最后点击“完成”将证书保存到文件中。

    注意:在生产环境,通常我们会把密码存储在某个配置中心,为了安全,建议密码不要硬编码。

    回顾

    以上只是一个小小的定制,我们是需要手动配置证书的,它适用于想在Docker上或没有IIS或NGINX的环境上面运行我们的程序,并且不担心证书存储等安全问题的场景,这种配置方法很灵活。另外,通常在IIS或NGINX等web服务器运行应用程序,我们无需关心ASP.NET Core 6.0中的证书。
    感谢您的阅读,在下一篇文章,我们将讨论如何配置ASP.NET CoreWeb应用的宿主环境。

    +

    (^_^)打个赏喝个咖啡(^_^)

    微信支付
  • 相关阅读:
    从零安装pytorch并在pycharm中使用
    渐变圆角边框css
    第五届太原理工大学程序设计竞赛新生赛(初赛)题解
    LeetCode-409. Longest Palindrome [C++][Java]
    【NSArray数组的遍历 Objective-C语言】
    SaaS 营销怎么做?几点思考
    AI项目十一:Swin Transformer训练
    计算机专业英语
    【Spring框架】——5.Bean的作用域及自动装配
    【实战】jenkins api 接口
  • 原文地址:https://www.cnblogs.com/jackyfei/p/16416868.html