Linux
Nginx
数据库
Python
PHP
C#
.NET
WPF
MAUI
Blazor
WinForm
帝国CMS
AKCMS
Typecho
织梦CMS
Visual Studio
Windows
Mac
Web前端
数据采集
运营
产品
摩托车
电影
杂事
本章是《定制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.js
和
ASP.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 Core
Web应用的宿主环境。
本文作者:张飞洪
信息来源:
公众号 dotNET跨平台
所属分类:
.NET
上一篇:
在 .NET 6 项目中使用 Startup.cs
下一篇:
深入探究.Net Core Configuration读取配置的优先级
Power by Typecho. Theme by Puma. Written by 董川民-
独立开发者
渝ICP备16006207号-2
渝公网安备 50011202503233号
友情链接: