在.netcore 6.0中使用Microsoft.AspNetCore.Server.Kestrel.Https进行https端口绑定和证书认证操作(不使用nginx等代理服务)

项目背景:

  公司有个项目需要跑在ubantu得开发板上,因配置有所限制,突发奇想,在此项目中不使用nginx来作为代理,用.netcore自带得Kestrel进行Https端口绑定,以减少服务数量来优化性能。

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服务器。

开始操作:

  1.首先我们在NuGet管理器中引入Microsoft.AspNetCore.Server.Kestrel.Https该包。 

   2.设置Kestrel,打开项目得Program.cs文件,添加如下代码。

 

builder.WebHost.UseKestrel(options =>
{
    //https访问配置
    options.Listen(IPAddress.Any, 443, listenOptions =>
    {
        listenOptions.UseHttps("/home/certs/server.pfx", "888888");
    });

});

 

  3.证书获取

在ubantu中安装openssl

 sudo apt-get update
 sudo apt-get install openssl

#创建一个文件夹
mkdir
certs cd certs
#创建证书密钥,其中,-out serer.key 表示将生成的私钥保存到名为server.key的文件中,2048表示密钥长度为2048位。 openssl genrsa
-out server.key 2048
#输入以下命令生成CSR(证书请求文件),其中,-new 表示创建新的CSR,-key server.key 表示使用上一步生成的私钥文件,-out server.csr 表示将生成的CSR保存到名为server.csr的文件中。 openssl req -new -key server.key -out server.csr
#输入以下命令生成自签名证书 crt文件 openssl x509
-req -days 365 -in server.csr -signkey server.key -out server.crt
#
将证书和私钥合并成一个.pfx文件。在命令行窗口中输入以下命令:
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

 

  4.将上面生成得pfx文件指定到项目中路径处,注意在使用Kestrel时候必须使用带有密码得pfx文件,其他证书无效。

  5.测试启动项目

  

cd 程序路径
dotnet xxxx.dll

  6.检查输出信息,如果输出了正确的端口号,则表示启动成功。

root@vanxoak:/home/webapi# dotnet xxxx.API.dll
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://0.0.0.0:443
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /home/baseStation/
info: Microsoft.Hosting.Lifetime[0]

 

在上面第一步我们是通过Program文件得代码注入完成本次https服务配置得,其实也可以在appsettings文件中通过配置来往完成。

"Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://*:443",
        "Certificate": {
          "Path": "/home/certs/server.pfx",
          "Password": "888888"
        }
      }
    }
  }

这样比起代码中注入更灵活。

 

posted on 2023-04-19 18:34  新东方程序员  阅读(1014)  评论(0)    收藏  举报