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