針對容器化 ASP.NET Core 應用程式使用 SSL
SSL (安全套接字層) 透過 HTTP (HTTPS) 提供安全連線。 這個保護連線的方法會使用憑證,而且在容器化應用程式中,埠對應會因安全且不安全的進入點而有所不同。
Multicontainer 應用程式架構會根據安全性需求而有所不同。 某些應用程式設計會針對外部端點使用 HTTPS,但 HTTP 用於從一個容器到另一個容器的內部通訊。 高安全性環境可能會對所有通訊採用 HTTPS,即使是在只能在安全外圍內存取的容器之間也是如此。
埠和埠對應
Dockerfile 包含指令,旨在透過不安全的 HTTP 或安全的 HTTPS,將埠公開至外部流量。 此外,.NET 8 和更新版本會以一般使用者身分執行容器化應用程式,但在舊版 .NET 中,容器化應用程式會以系統管理員身分執行。 以系統管理員身分執行時,應用程式可以存取用於 HTTP 流量的特權埠 80 和用於 HTTPS 流量的特權埠 443。 當應用程式以沒有提高許可權的使用者身分執行時,會使用 HTTP 的埠 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。