在.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学 ...
随机推荐
- css 进阶实战项目
1. html 结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Python schedule 库定时任务
Python schedule 库定时任务 schedule的使用 # 用于scrapy定时任务设置 import schedule import time def job(): print(&quo ...
- 【GPLT】 图着色问题(c++)
题目如下: 这道题就是奇葩,多少有点低质量,这题不难,知识点就是邻接矩阵,但有以下奇葩点 1.颜色的编号是1-v 不是1-k,这点卡了我一会: 2.颜色涂色可以多于3,也可以少于3(这其实正常,但如果 ...
- 什么是边缘CDN和虚拟CDN (vCDN)?
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 如今CDN有哪些局限性? 现如今,内容和游戏提供商正面临着越来越大的压力,它们需要向最终用户提 ...
- Linux vs Unix - Linux与Unix到底有什么不同?
来自:Linux迷链接:https://www.linuxmi.com/linux-vs-unix.html Linux和Unix这两个术语可以互换地用来指同一操作系统.这在很大程度上是由于他们惊人的 ...
- js项目案例
2021.04.12 --mouseover抖动情况之一
- Oracle19c单实例数据库配置OGG单用户数据同步测试
目录 19c单实例配置GoldenGate 并进行用户数据同步测试 一.数据库操作 1.开启数据库附加日志 2.开启数据库归档模式 3.开启goldengate同步 4.创建goldengate管理用 ...
- 3┃音视频直播系统之浏览器中通过 WebRTC 直播视频实时录制回放下载
一.录制分类 在音视频会议.在线教育等系统中,录制是一个特别重要的功能 录制一般分为服务端录制和客户端录制 服务端录制:优点是不用担心客户因自身电脑问题造成录制失败(如磁盘空间不足),也不会因录制时抢 ...
- JUC自定义线程池练习
JUC自定义线程池练习 首先上面该线程池的大致流程 自定义阻塞队列 首先定义一个双向的队列和锁一定两个等待的condition 本类用lock来控制多线程下的流程执行 take和push方法就是死等, ...
- windbg的时间旅行实现对 C# 程序的终极调试
一:什么是时间旅行 简而言之就是把程序的执行流拍成vlog,这样就可以对 vlog 快进或者倒退,还可以分享给别人做进一步的分析,是不是想都不敢想. 很开心的是 windbg preview 版本中已 ...