大家好,我是張飛洪,感謝您的閱讀,我會不定期和你分享學習心得,希望我的文章能成爲你成長路上的墊腳石,讓我們一起精進。
本章是《定製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應用的宿主環境。