ASP.NET Core 預設使用 HTTPS。 HTTPS 依賴 憑證, 信任、身分識別和加密。
本文件說明如何使用 .NET 命令列介面 (CLI),透過 HTTPS 執行預先建置的容器映像。 如需如何使用 Visual Studio 在開發環境中執行 Docker 的指示,請參閱使用 Docker over HTTPS 開發 ASP.NET Core 應用程式。
此範例需要 Docker 17.06 或更新版本的 Docker 用戶端 。
必要條件
目前的 .NET SDK。
憑證
網域的生產託管需要憑證授權單位提供的憑證。 Let's Encrypt 是提供免費憑證的憑證授權單位。
本文件使用自我簽署的開發憑證,透過 localhost 裝載預先建置的映像。 這些指示與使用生產憑證的說明相似。
dotnet dev-certs 所產生的憑證只能搭配 localhost 使用,且不得在 Kubernetes 之類的環境中使用。 若要在 Kubernetes 叢集內支援 HTTPS,請使用在叢集中管理 TLS 憑證所提供的工具,在 Pods 中設定 TLS。
使用 dotnet dev-certs 來建立自我簽署憑證以進行開發和測試。
針對生產憑證:
- 不需要
dotnet dev-certs工具。 - 憑證不需要儲存在說明中使用的位置。 任何位置都應該能運作,不過不建議在站台目錄中儲存憑證。
下一節包含的指示會使用 Docker 的 -v 命令列選項,使用磁碟區掛接將憑證掛接到容器中。 您可以在 Dockerfile 中使用 COPY 命令將憑證新增至容器映像,但不建議這麼做。 基於下列理由,不建議將憑證複製到映像:
- 難以使用相同的映像並搭配開發人員憑證進行測試。
- 難以使用相同的映像來進行生產憑證的主機託管。
- 存在憑證洩露的重大風險。
透過 HTTPS 執行預先建置的容器映像
針對您的作業系統組態,使用下列指示。
在 Windows 上使用 Linux 容器
產生憑證並設定本機電腦:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
在上述命令中,將 <CREDENTIAL_PLACEHOLDER> 取代為密碼。
在命令殼層中,執行已針對 HTTPS 設定 ASP.NET Core 的容器映像:
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=443 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp
在上述程式碼中,以密碼取代<CREDENTIAL_PLACEHOLDER>。 密碼必須與憑證使用的密碼一致。
使用 PowerShell 時,將 %USERPROFILE% 取代為 $env:USERPROFILE。
在這種情況下,憑證必須是 .pfx 檔案。 範例容器不支援利用具有或不具密碼的 .crt 或 .key 檔案。 例如,指定 .crt 檔案時,容器可能會傳回錯誤訊息,例如「伺服器模式 SSL 必須使用具有關聯私密金鑰的憑證」。 使用 WSL 時,請驗證裝載路徑以確保憑證正確載入。
Note
不要將 ASPNETCORE_HTTPS_PORTS 組態索引鍵和 Kestrel 環境變數(它們會設定 HTTPS_PORT/HTTP.sys 端點組態的連接埠),與 組態索引鍵和 ASPNETCORE_HTTPS_PORT 環境變數(它們會設定 HTTPS_PORTS 的連接埠)混淆。
macOS 或 Linux
產生憑證並設定本機電腦:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
在 Linux 上, dotnet dev-certs https --trust 需要 .NET 9 或更新版本的 SDK。 針對 .NET 8.0.401 或更早版本的 SDK 上的 Linux,請參閱 Linux 發行版的文件以建立憑證信任。
在上述命令中,將 <CREDENTIAL_PLACEHOLDER> 替換為密碼。
使用針對 HTTPS 設定的 ASP.NET Core 執行容器映像:
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=443 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v ${HOME}/.aspnet/https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp
在上述程式碼中,將 <CREDENTIAL_PLACEHOLDER> 取代為密碼。 密碼必須與憑證使用的密碼一致。
Note
不要將 ASPNETCORE_HTTPS_PORTS 組態索引鍵和 Kestrel 環境變數(它們會設定 HTTPS_PORT/HTTP.sys 端點組態的連接埠),與 組態索引鍵和 ASPNETCORE_HTTPS_PORT 環境變數(它們會設定 HTTPS_PORTS 的連接埠)混淆。
Windows 使用 Windows 容器
產生憑證並設定本機電腦:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
在上述命令中,將 <CREDENTIAL_PLACEHOLDER> 替換為密碼。 使用 PowerShell 時,將 %USERPROFILE% 取代為 $env:USERPROFILE。
使用針對 HTTPS 設定的 ASP.NET Core 執行容器映像:
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=443 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=c:\https\aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:C:\https\ --user ContainerAdministrator mcr.microsoft.com/dotnet/samples:aspnetapp
注意:<CREDENTIAL_PLACEHOLDER> 是 Kestrel 憑證預設密碼的佔位符。
密碼必須與憑證使用的密碼一致。 使用 PowerShell 時,將 %USERPROFILE% 取代為 $env:USERPROFILE。
透過 HTTPS 使用 Docker 開發 ASP.NET Core 應用程式
如需如何在 Docker 容器中透過 HTTPS 開發 ASP.NET Core 應用程式的資訊和範例,請參閱使用 Docker 透過 HTTPS 開發 ASP.NET Core 應用程式。
另請參閱
ASP.NET Core 預設使用 HTTPS。 HTTPS 依賴 憑證, 信任、身分識別和加密。
本文件說明如何使用 .NET 命令列介面 (CLI),透過 HTTPS 執行預先建置的容器映像。 如需如何使用 Visual Studio 在開發環境中執行 Docker 的指示,請參閱使用 Docker over HTTPS 開發 ASP.NET Core 應用程式。
此範例需要 Docker 17.06 或更新版本的 Docker 用戶端 。
必要條件
目前的 .NET SDK。
憑證
網域的生產託管需要憑證授權單位提供的憑證。 Let's Encrypt 是提供免費憑證的憑證授權單位。
本文件使用自我簽署的開發憑證,透過 localhost 託管預先建置的映像。 這些說明類似於使用生產憑證。
dotnet dev-certs 所產生的憑證只能搭配 localhost 使用,且不得在 Kubernetes 之類的環境中使用。 若要在 Kubernetes 叢集內支援 HTTPS,請使用在叢集中管理 TLS 憑證所提供的工具,在 Pod 中設定 TLS。
使用 dotnet dev-certs 來建立自我簽署憑證以進行開發和測試。
針對生產憑證:
- 不需要
dotnet dev-certs工具。 - 憑證不需要儲存在說明中使用的位置。 任何位置都應該能運作,不過不建議在站台目錄中儲存憑證。
下一節包含的指示會使用 Docker 的 -v 命令列選項,將憑證以磁碟區掛接到容器中。 您可以在 Dockerfile 中使用 COPY 命令將憑證新增至容器映像,但不建議這麼做。 基於下列理由,不建議將憑證複製到映像:
- 難以使用相同的映像來測試開發人員憑證。
- 難以使用相同的映像來託管生產憑證。
- 憑證有重大洩露風險。
透過 HTTPS 執行預先建置的容器映像
針對您的作業系統組態,使用下列指示。
Windows 上使用 Linux 容器
產生憑證並設定本機電腦:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
在上述命令中,將 <CREDENTIAL_PLACEHOLDER> 替換為密碼。
在命令殼層中,執行已針對 HTTPS 設定 ASP.NET Core 的容器映像:
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+:443;http://+" -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp
在上述程式碼中,將 <CREDENTIAL_PLACEHOLDER> 取代為密碼。 密碼必須與憑證使用的密碼一致。
使用 PowerShell 時,以 $env:USERPROFILE 取代 %USERPROFILE%。
注意:在此情況下,憑證必須是 .pfx 檔案。 範例容器不支援利用具有或不具密碼的 .crt 或 .key 檔案。 例如,指定 .crt 檔案時,容器可能會傳回錯誤訊息,例如「伺服器模式 SSL 必須使用具有關聯私密金鑰的憑證」。 使用 WSL 時,請驗證裝載路徑以確保憑證正確載入。
macOS 或 Linux
產生憑證並設定本機電腦:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
只有在 macOS 和 Windows 上才支援 dotnet dev-certs https --trust。 您必須以您的發行版所支援的方式,在 Linux 上信任憑證。 您可能需要在瀏覽器中信任憑證。
在上述命令中,將 <CREDENTIAL_PLACEHOLDER> 替換為密碼。
使用針對 HTTPS 設定的 ASP.NET Core 執行容器映像:
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+:443;http://+" -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v ${HOME}/.aspnet/https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp
在上述程式碼中,將 <CREDENTIAL_PLACEHOLDER> 取代為密碼。 密碼必須與憑證使用的密碼一致。
使用 Windows 容器
產生憑證並設定本機電腦:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
在上述命令中,將 <CREDENTIAL_PLACEHOLDER> 替換為密碼。 使用 PowerShell 時,以 $env:USERPROFILE 取代 %USERPROFILE%。
使用針對 HTTPS 設定的 ASP.NET Core 執行容器映像:
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+:443;http://+" -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=c:\https\aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:C:\https\ --user ContainerAdministrator mcr.microsoft.com/dotnet/samples:aspnetapp
注意:<CREDENTIAL_PLACEHOLDER> 是 Kestrel 憑證預設密碼的預留位置。
密碼必須與憑證使用的密碼一致。 使用 PowerShell 時,將 %USERPROFILE% 取代為 $env:USERPROFILE。
透過 HTTPS 使用 Docker 開發 ASP.NET Core 應用程式
如需如何在 Docker 容器中透過 HTTPS 開發 ASP.NET Core 應用程式的資訊和範例,請參閱透過 HTTPS 在 Docker 中開發 ASP.NET Core 應用程式。