本質上我還是一個Windows App Developer,所以雖然會做一些ASP.NET Core的工作,但通常這些ASP.NET Core的程序會託管在Windows Service上,並且大部分時候跑在局域網環境。說實話傳統行業的Win DEV對Web這一套其實不怎麼精通,今天我們來看一下ASP.NET Core程序如何通過配置文件添加證書,啓用HTTPS。
回顧上一篇《.NET 6學習筆記(6)——SSL證書的導出和格式轉換》,我們介紹瞭如何從Windows中查找證書,並轉換格式。
因爲本篇的ASP.NET Core可以直接使用PFX證書,所以轉換這一步不再提及。我們託管在Windows Service上的ASP.NET Core程序,一般都是通過本機域名localhost + port的形式來訪問。這也爲使用自簽證書創造了便利的條件,只要像給IIS Express用的自簽證書一樣,證書“使用者”(Subject)的CN(Common Name)屬性是localhost,即可滿足我們的要求。
除了去申請一個免費的SSL證書外。這裏也討論下,如何從Windows導出PFX格式的證書。仍以IIS Express用的自簽證書舉例。
通過PowerShell腳本,可以方便的查找並導出:
$thumbPrint = $null $certs = get-childitem cert:\\LocalMachine\\my foreach ($certItem in $certs) { $certItem.Issuer if ($certItem.Issuer -eq "CN=localhost") { $thumbPrint = $certItem.Thumbprint break } } Write-Host $thumbPrint if ($null -ne $thumbPrint){ $mypwd = ConvertTo-SecureString -String "1234" -Force -AsPlainText Get-ChildItem -Path cert:\localMachine\my\$thumbPrint | Export-PfxCertificate -FilePath C:\temp\sampleCert.pfx -Password $mypwd Write-Host "Export IIS Express cert as Pfx file sucessfully." } else { Write-Host "Can't find IIS Express cert." }
根據上述腳本,導出的證書我們在C:\temp目錄可以找到,導出的時候設置了密碼1234,ASP.NET Core程序通過配置文件添加證書,需要填寫該密碼。
當然ASP.NET Core啓用HTTPS的方式有很多種,通過配置文件appsetting.Production.json來添加證書。可能是最簡單的一種。
至於如何創建用來託管ASP.NET Core程序的Windows Service,可以參考《.NET 6學習筆記(3)——在Windows Service中託管ASP.NET Core並指定端口》。
在示例中,我們創建一個空的ASP.NET Core Web Application,然後添加一個appsettings.Production.json文件,添加如下圖所示的配置信息。節點名稱HttpsInlineCertFile只是舉例,並非固定。
在完成以上修改後,我們publish該示例程序,成功發佈後,打開publish的文件夾。然後我們雙擊生成的exe文件。可以看到我們成功應用了配置文件中的端口號,以及https的url。
接下來打開瀏覽器訪問這個地址,查看證書可以發現證書的使用者是localhost,這是我們導出的IIS Express證書能被來拿使用的原因。
如果想要驗證確實是在使用導出到c:\temp文件夾的證書,可以把導出的證書文件刪掉。然後重新打開publish目錄下的exe文件,會有Exception拋出。
本篇就到這裏了,在實際的項目中,不太可能去導出IIS Express使用的證書,但是原理是相似的,不同項目組之間的Web APP在集成的時候,往往會需要實現文中的操作。
Github:
以下鏈接,是MS Learn上Windows開發的入門課程,單個課程三十分鐘到60分鐘不等,想要補充基礎知識的同學點這裏: