在.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.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应用的宿主环境。
在.NET 6.0上使用Kestrel配置和自定义HTTPS的更多相关文章
- 怎样在CentOS 7.0上安装和配置VNC服务器
VNC轻松连接远程Linux桌面 http://jingyan.baidu.com/article/6c67b1d6f1bac92786bb1e6d.html 这是一个关于怎样在你的 CentOS 7 ...
- CentOS 7.0 上安装和配置 VNC 服务器
作为一个系统管理员,大多数时间是通过网络管理服务器的.在管理服务器的过程中很少会用到图形界面,多数情况下我们只是用 SSH 来完成我们的管理任务.在这篇文章里,我们将配置 VNC 来提供一个连接我们 ...
- 怎样在 CentOS 7.0 上安装和配置 VNC 服务器
这是一个关于怎样在你的 CentOS 7 上安装配置 VNC 服务的教程.当然这个教程也适合 RHEL 7 .在这个教程里,我们将学习什么是 VNC 以及怎样在 CentOS 7 上安装配置 VNC ...
- Mac上Node环境配置
公司配备Mac笔记本,以前没用过mac开发项目,一开始依然是从node官网下载安装包,后来领导说最好是用brew安装软件,这样比较方便,安装和卸载,只要在命令行输入相应的 install 和 unin ...
- 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】
鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台 ,收 ...
- Windows 8.0上Eclipse 4.4.0 配置CentOS 6.5 上的Hadoop2.2.0开发环境
原文地址:http://www.linuxidc.com/Linux/2014-11/109200.htm 图文详解Windows 8.0上Eclipse 4.4.0 配置CentOS 6.5 上的H ...
- redis3.0.5在linux上安装与配置
redis3.0.5在linux上安装与配置 rhel6/ubuntu14 1 下载 # wget http://download.redis.io/releases/redis-3.0.5.tar. ...
- CDH仅完成 0/3 个步骤。首个失败:主机 node6 (id=2) 上的客户端配置 (id=1) 已使用 1 退出,而预期值为 0。
CDH仅完成 0/3 个步骤.首个失败:主机 node6 (id=2) 上的客户端配置 (id=1) 已使用 1 退出,而预期值为 0 javaHome出现了问题 JAVA_HOME并不是根据环境 ...
- 【JMeter4.0学习(二)】之搭建openLDAP在windows8.1上的安装配置以及JMeter对LDAP服务器的性能测试脚本开发
目录: 概述 安装测试环境 安装过程 配置启动 配置搭建OpenLDAP 给数据库添加数据 测试查询刚刚插入的数据 客户端介绍 JMeter建立一个扩展LDAP服务器的性能测试脚本开发 附:LDAP学 ...
随机推荐
- HCIE笔记-第七节-ICMP+ARP
ICMP重定向 作用:解决网络中的次优路径 触发:当某一个设备收到一个数据,进行转发时发现还要从该接口进行转发,于是触发ICMP重定向. 报文:Type=5,Code=0 ARP -- 地址解析协议 ...
- Windbg调试工具命令详解
.cls -------------------------------清屏 ~ ----------------------------------查看当前程序的所有线程 ~0s --------- ...
- Git删除已提交的文件
Git删除已提交的文件 Git删除已提交的文件 定位文件 删除文件 参考链接 昨天通过Git Bash提交代码的时候遇到了由于单个文件大小超过100M,导致代码上传失败的问题.考虑到那个大文件是用于训 ...
- python @符号用法的简单理解
一.用作函数修饰符 作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等 创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回值取代被修饰函数 ...
- 开源框架YiShaAdmin如何使用任务计划
1.在Startup添加 new JobCenter().Start();(红色字体,下同) // This method gets called by the runtime. Use this m ...
- Java 18 新特性:使用Java代码启动jwebserver
前几天分享了Java 18 新特性:简单Web服务器的jwebserver命令行功能. 今天换一种方式,使用Java代码来实现一个静态资源服务器. 详细步骤我录了个视频放到B站了,感兴趣的小伙伴可以点 ...
- [STL] map 映射
- C#关于在返回值为Task方法中使用Thread.Sleep引发的思考
起因 最近有个小伙伴提出了一个问题,就是在使用.net core的BackgroundService的时候,对应的ExecuteAsync方法里面写如下代码,会使程序一直卡在当前方法,不会继续执行,代 ...
- Solon 1.7.6 发布,更现代感的应用开发框架
相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...
- OAuth2授权服务器Id Server一键生成配置原理
OAuth2客户端的配置参数非常多,虽然Id Server通过控制台可视化解决了创建OAuth2客户端的问题.但是如何进一步降低OAuth2的使用难度,把创建的OAuth2客户端转化为配置成为了刚需, ...