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

本章是《定制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应用的宿主环境。

在.NET 6.0上使用Kestrel配置和自定义HTTPS的更多相关文章

  1. 怎样在CentOS 7.0上安装和配置VNC服务器

    VNC轻松连接远程Linux桌面 http://jingyan.baidu.com/article/6c67b1d6f1bac92786bb1e6d.html 这是一个关于怎样在你的 CentOS 7 ...

  2. CentOS 7.0 上安装和配置 VNC 服务器

    作为一个系统管理员,大多数时间是通过网络管理服务器的.在管理服务器的过程中很少会用到图形界面,多数情况下我们只是用 SSH 来完成我们的管理任务.在这篇文章里,我们将配置 VNC 来提供一个连接我们 ...

  3. 怎样在 CentOS 7.0 上安装和配置 VNC 服务器

    这是一个关于怎样在你的 CentOS 7 上安装配置 VNC 服务的教程.当然这个教程也适合 RHEL 7 .在这个教程里,我们将学习什么是 VNC 以及怎样在 CentOS 7 上安装配置 VNC ...

  4. Mac上Node环境配置

    公司配备Mac笔记本,以前没用过mac开发项目,一开始依然是从node官网下载安装包,后来领导说最好是用brew安装软件,这样比较方便,安装和卸载,只要在命令行输入相应的 install 和 unin ...

  5. 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】

    鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash  ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台  ,收 ...

  6. 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 ...

  7. redis3.0.5在linux上安装与配置

    redis3.0.5在linux上安装与配置 rhel6/ubuntu14 1 下载 # wget http://download.redis.io/releases/redis-3.0.5.tar. ...

  8. CDH仅完成 0/3 个步骤。首个失败:主机 node6 (id=2) 上的客户端配置 (id=1) 已使用 1 退出,而预期值为 0。

      CDH仅完成 0/3 个步骤.首个失败:主机 node6 (id=2) 上的客户端配置 (id=1) 已使用 1 退出,而预期值为 0 javaHome出现了问题 JAVA_HOME并不是根据环境 ...

  9. 【JMeter4.0学习(二)】之搭建openLDAP在windows8.1上的安装配置以及JMeter对LDAP服务器的性能测试脚本开发

    目录: 概述 安装测试环境 安装过程 配置启动 配置搭建OpenLDAP 给数据库添加数据 测试查询刚刚插入的数据 客户端介绍 JMeter建立一个扩展LDAP服务器的性能测试脚本开发 附:LDAP学 ...

随机推荐

  1. Java学习day32

    生产与消费者问题:假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者从仓库中取走产品:如果仓库中没有产品,生产者就将产品放入仓库,否则就停止生产等待:如果仓库中有产品,消费者就取走,否 ...

  2. php第一次实验个人博客网站的设计编写①

    先上效果图: 网页代码:index.html <!DOCTYPE html> <html lang="en"> <head>     <m ...

  3. 认识python-个人笔记篇

    认识python 1 .python 的发展历史 一种广泛使用的解释型.高级编程.通用型编程语言,由"龟叔"吉多·范罗苏姆创造,第一版发布于1991年. Python的设计哲学强调 ...

  4. MySQL 视图简介

    概述 数据库中关于数据的查询有时非常复杂,例如表连接.子查询等,这种查询编写难度大,很容易出错.另外,在具体操作表时,有时候要求只能操作部分字段. 为了提高复杂 SQL 语句的复用性和表的操作的安全性 ...

  5. python学习-Day37

    目录 今日内容详细 GIL全局解释器锁 GIL与普通互斥锁区别 GIL对程序的影响 验证多线程作用 两个大前提 关于CPU的个数 关于任务的类型 死锁现象 避免死锁的解决: 添加超时释放锁 信号量 自 ...

  6. python连接redis、redis字符串操作、hash操作、列表操作、其他通用操作、管道、django中使用redis

    今日内容概要 python连接redis redis字符串操作 redis之hash操作 redis之列表操作 redis其他 通用操作,管道 django中使用redis 内容详细 1.python ...

  7. XCTF练习题---MISC---normal_png

    XCTF练习题---MISC---normal_png flag:flag{B8B68DD7007B1E406F3DF624440D31E0} 解题步骤: 1.观察题目,下载附件 2.拿到手以后发现是 ...

  8. 快速了解Spring,简明Spring使用流程

    前言: 注意题目,这篇文章说的是操作,也就是重在应用,更多的是一个入门的或者说一篇概览,所以大佬们多多担待,不涉及底层分析和很多的源码,所以如果看官想看以上两者的可以划走了,有时间又不懒的话,可能以后 ...

  9. MybatisCodeHelperPro简单使用

    1.idea安装 2.连接mysql 3.创建实体等关联类 ,选择数据库表右键选择如图 4配置 生成后的 5简单应用 可以直接生成xml 总结:非常的方便快捷.

  10. 定时 ——setTimeout | setInterval

    使用场景,setTimeout 只调用一次,setInterval 会重复调用,直到清除或重载. <div id="countDown"></div> &l ...