ASP.NET Core 預設使用 HTTPS。 HTTPS 依賴 憑證, 信任、身分識別和加密。
本文件說明如何使用 HTTPS 執行預先建置的容器映像。
如需開發案例,請參閱使用 Docker over HTTPS 開發 ASP.NET Core 應用程式。
此範例需要 Docker 17.06 或更新版本的 Docker 用戶端 。
必要條件
本文件中的部分說明需要 .NET Core 2.2 SDK 或更新版本。
憑證
網域的生產託管需要憑證授權單位提供的憑證。 Let's Encrypt 是提供免費憑證的憑證授權單位。
本文件使用自我簽署的開發憑證,透過 localhost 裝載預先建置的映像。 這些指示類似於使用生產憑證。
針對正式環境憑證:
- 不需要
dotnet dev-certs工具。 - 憑證不需要儲存在說明中使用的位置。 將憑證儲存在網站目錄以外的任何位置。
下一節中所包含的指示會在 docker-compose.yml. 中使用 volumes 屬性,將憑證掛接至容器。您可以在 Dockerfile 中使用 COPY 命令將憑證新增至容器映像,但不建議這麼做。 基於下列理由,不建議將憑證複製到映像:
- 這會使使用相同映像透過開發人員憑證進行測試變得困難。
- 這使得很難將相同的映像用於使用生產憑證的 Hosting。
- 憑證外洩有重大風險。
使用 docker compose 以 HTTPs 支援啟動容器
針對您的作業系統組態,使用下列指示。
在 Windows 上使用 Linux 容器
產生憑證並設定本機電腦:
dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx" -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust
使用 .NET CLI 的前述命令:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust
在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 替換為密碼。
使用下列內容建立 docker-compose.debug.yml 檔案:
version: '3.4'
services:
webapp:
image: mcr.microsoft.com/dotnet/samples:aspnetapp
ports:
- 80
- 443
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
volumes:
- ~/.aspnet/https:/https:ro
docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。
使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:
docker-compose -f "docker-compose.debug.yml" up -d
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$ 取代為密碼。
使用下列內容建立 docker-compose.debug.yml 檔案:
version: '3.4'
services:
webapp:
image: mcr.microsoft.com/dotnet/samples:aspnetapp
ports:
- 80
- 443
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
volumes:
- ~/.aspnet/https:/https:ro
docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。
使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:
docker-compose -f "docker-compose.debug.yml" up -d
使用 Windows 容器
產生憑證並設定本機電腦:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust
在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 取代為密碼。
使用下列內容建立 docker-compose.debug.yml 檔案:
version: '3.4'
services:
webapp:
image: mcr.microsoft.com/dotnet/samples:aspnetapp
ports:
- 80
- 443
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
- ASPNETCORE_Kestrel__Certificates__Default__Path=C:\https\aspnetapp.pfx
volumes:
- ${USERPROFILE}\.aspnet\https:C:\https:ro
docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。
使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:
docker-compose -f "docker-compose.debug.yml" up -d
另請參閱
ASP.NET Core 預設使用 HTTPS。 HTTPS 依賴 憑證, 信任、身分識別和加密。
本文件說明如何使用 HTTPS 執行預先建置的容器映像。
如需開發案例,請參閱使用 Docker over HTTPS 開發 ASP.NET Core 應用程式。
此範例需要 Docker 17.06 或更新版本的 Docker 用戶端 。
必要條件
本文件的部分指示需要 .NET Core 2.2 SDK 或更新版本。
憑證
網域的生產託管需要憑證授權單位提供的憑證。 Let's Encrypt 是提供免費憑證的憑證授權單位。
本文件使用自我簽署的開發憑證,透過 localhost 託管預先建置的映像。 這些指示類似於使用生產憑證。
針對正式環境憑證:
- 不需要使用
dotnet dev-certs工具。 - 憑證不需要儲存在說明中使用的位置。 將憑證儲存在網站目錄以外的任何位置。
下列章節中所包含的指示會使用 docker-compose.yml. 中的 volumes 屬性,將憑證掛接至容器。您可以在 Dockerfile 中使用 COPY 命令將憑證新增至容器映像,但不建議這麼做。 基於下列理由,不建議將憑證複製到映像:
- 這會使使用相同映像檔透過開發人員憑證進行測試變得困難。
- 這使得很難將相同的映像用於 Hosting 並搭配生產憑證。
- 憑證有遭到洩露的重大風險。
使用 docker compose 以 HTTPS 支援啟動容器
針對您的作業系統組態,使用下列指示。
在 Windows 上使用 Linux 容器
產生憑證並設定本機電腦:
dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx" -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust
使用 .NET CLI 的上一個命令:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust
在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 取代為密碼。
使用下列內容建立 docker-compose.debug.yml 檔案:
version: '3.4'
services:
webapp:
image: mcr.microsoft.com/dotnet/samples:aspnetapp
ports:
- 80
- 443
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
volumes:
- ~/.aspnet/https:/https:ro
docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。 在上述命令中,將 -\0pw- 替換為密碼。
使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:
docker-compose -f "docker-compose.debug.yml" up -d
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$ 替換為密碼。
使用下列內容建立 docker-compose.debug.yml 檔案:
version: '3.4'
services:
webapp:
image: mcr.microsoft.com/dotnet/samples:aspnetapp
ports:
- 80
- 443
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=password
- ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
volumes:
- ~/.aspnet/https:/https:ro
docker compose 檔案中指定的密碼必須符合憑證所使用的密碼。
使用針對 HTTPS 設定的 ASP.NET Core 啟動容器:
docker-compose -f "docker-compose.debug.yml" up -d
在 Windows 上使用 Windows 容器
產生憑證並設定本機電腦:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust
在上述命令中,將 $CREDENTIAL_PLACEHOLDER$ 以密碼取代。
使用下列內容建立 docker-compose.debug.yml 檔案:
version: '3.4'
services:
webapp:
image: mcr.microsoft.com/dotnet/samples:aspnetapp
ports:
- 80
- 443
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
- ASPNETCORE_Kestrel__Certificates__Default__Path=C:\https\aspnetapp.pfx
volumes:
- ${USERPROFILE}\.aspnet\https:C:\https:ro
The password specified in the docker compose file must match the password used for the certificate. In the preceding commands, replace `-\0pw-` with a password.
Start the container with ASP.NET Core configured for HTTPS:
```console
docker-compose -f "docker-compose.debug.yml" up -d