.NET 6學習筆記(7)——ASP.NET Core透過配置檔案啟用HTTPS

樓上那個蜀黍發表於2023-02-12

本質上我還是一個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:

manupstairs/WebAppWithHttps: This example is used to demonstrate how to add an SSL certificate through a configuration file to enable HTTPS in ASP.NET Core (github.com)

以下連結,是MS Learn上Windows開發的入門課程,單個課程三十分鐘到60分鐘不等,想要補充基礎知識的同學點這裡:

開始使用 Visual Studio 開發 Windows 10 應用

開發 Windows 10 應用程式

編寫首個 Windows 10 應用

建立 Windows 10 應用的使用者介面 (UI)

增強 Windows 10 應用的使用者介面

在 Windows 10 應用中實現資料繫結

相關文章