使用容器化 ASP.NET Core 應用程式的 SSL
SSL (安全套接字層) 透過 HTTP (HTTPS) 提供安全連線。 這個保護連線的方法會使用憑證,且在容器化應用程式中,埠對應會因安全與不安全的進入點而有所不同。
多容器應用程式架構會根據安全性需求而有所不同。 某些應用程式設計會針對外部端點使用 HTTPS,但對於從一個容器到另一個容器的內部通訊使用 HTTP。 高安全性環境可能會對所有通訊使用 HTTPS,即使是對只能在安全外部周邊內存取的容器之間也是如此。
埠和埠對應
Dockerfile 包含指示詞,可透過不安全的 HTTP 或安全的 HTTPS,將埠公開至外部流量。 此外,.NET 8 和更新版本會以一般使用者身分執行容器化應用程式,但在舊版 .NET 中,容器化應用程式會以系統管理員身分執行。 以系統管理員身分執行時,應用程式可以存取 HTTP 流量和 443 HTTPS 流量的特殊權限埠 80。 當應用程式以不具提高權限的使用者身分執行時,他們會使用 HTTPS 的埠 8080 和 HTTPS 的埠 8081。 埠會出現在 Visual Studio 產生的 Dockerfile 的 EXPOSE 命令中。 Dockerfile 中所指定容器中的埠會使用啟動設定檔中指定的對應,來對應至主機埠。 請參閱容器工具啟動設定。 當容器執行時,您可以在容器視窗中檢視埠對應。 請參閱檢視及診斷容器。
憑證
Visual Studio 中的容器工具支援使用開發憑證對已啟用 SSL 的 ASP.NET Core 應用程式進行偵錯,運作方式與沒有容器時的方式一樣。 為了這麼做,Visual Studio 會新增幾個步驟來匯出憑證,並將其提供給容器。 以下是在容器中偵錯時,Visual Studio 為您處理的流程:
透過
dev-certs
工具確定本機開發憑證存在主機電腦上,並且受到信任。使用儲存在此特定應用程式的使用者祕密存放區中的安全密碼,將憑證匯出至
%APPDATA%\ASP.NET\Https
。對下列目錄進行磁碟區掛接:
*%APPDATA%\Microsoft\UserSecrets
*%APPDATA%\ASP.NET\Https
ASP.NET Core 會尋找符合 Https 資料夾下組件名稱的憑證,這就是為什麼其對應至該路徑中容器的原因。 憑證路徑和密碼也可以使用環境變數 (也就是 ASPNETCORE_Kestrel__Certificates__Default__Path
和 ASPNETCORE_Kestrel__Certificates__Default__Password
) 進行定義,或在使用者祕密 json 檔案中定義,例如:
{
"Kestrel": {
"Certificates": {
"Default": {
"Path": "c:\\app\\mycert.pfx",
"Password": "strongpassword"
}
}
}
}
如果您的設定同時支援容器化和非容器化建置,您應該使用環境變數,因為路徑是容器環境特有的。
如需在容器中使用 SSL 搭配 ASP.NET Core 應用程式的詳細資訊,請參閱透過 HTTPS 使用 Docker 裝載 ASP.NET Core 映像 (部分機器翻譯)。
如需程式碼範例來示範如何為主機上及容器中信任的多服務應用程式建立自訂憑證,以用於 HTTPS 的服務對服務通訊,請參閱 CertExample (英文)。