在.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" } } } }
这样比起代码中注入更灵活。
浙公网安备 33010602011771号