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

本章是《定制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. HCIE笔记-第七节-ICMP+ARP

    ICMP重定向 作用:解决网络中的次优路径 触发:当某一个设备收到一个数据,进行转发时发现还要从该接口进行转发,于是触发ICMP重定向. 报文:Type=5,Code=0 ARP -- 地址解析协议 ...

  2. Windbg调试工具命令详解

    .cls -------------------------------清屏 ~ ----------------------------------查看当前程序的所有线程 ~0s --------- ...

  3. Git删除已提交的文件

    Git删除已提交的文件 Git删除已提交的文件 定位文件 删除文件 参考链接 昨天通过Git Bash提交代码的时候遇到了由于单个文件大小超过100M,导致代码上传失败的问题.考虑到那个大文件是用于训 ...

  4. python @符号用法的简单理解

    一.用作函数修饰符 作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等 创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回值取代被修饰函数 ...

  5. 开源框架YiShaAdmin如何使用任务计划

    1.在Startup添加 new JobCenter().Start();(红色字体,下同) // This method gets called by the runtime. Use this m ...

  6. Java 18 新特性:使用Java代码启动jwebserver

    前几天分享了Java 18 新特性:简单Web服务器的jwebserver命令行功能. 今天换一种方式,使用Java代码来实现一个静态资源服务器. 详细步骤我录了个视频放到B站了,感兴趣的小伙伴可以点 ...

  7. [STL] map 映射

  8. C#关于在返回值为Task方法中使用Thread.Sleep引发的思考

    起因 最近有个小伙伴提出了一个问题,就是在使用.net core的BackgroundService的时候,对应的ExecuteAsync方法里面写如下代码,会使程序一直卡在当前方法,不会继续执行,代 ...

  9. Solon 1.7.6 发布,更现代感的应用开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  10. OAuth2授权服务器Id Server一键生成配置原理

    OAuth2客户端的配置参数非常多,虽然Id Server通过控制台可视化解决了创建OAuth2客户端的问题.但是如何进一步降低OAuth2的使用难度,把创建的OAuth2客户端转化为配置成为了刚需, ...