Hostowanie obrazów ASP.NET Core za pomocą narzędzia Docker Compose za pośrednictwem protokołu HTTPS

ASP.NET Core używa HTTPS domyślnie. HTTPS opiera się na certyfikatach na potrzeby zaufania, tożsamości i szyfrowania.

W tym dokumencie wyjaśniono, jak uruchamiać wstępnie utworzone obrazy kontenerów przy użyciu protokołu HTTPS.

Zobacz Tworzenie aplikacji ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS, aby zapoznać się ze scenariuszami programowania.

Ten przykład wymaga klienta Docker w wersji 17.06 lub nowszej.

Wymagania wstępne

Zestaw .NET Core 2.2 SDK lub nowszy jest wymagany dla niektórych instrukcji w tym dokumencie.

Certyfikaty

Certyfikat z urząd certyfikacji jest wymagany do hostowania produkcyjnego dla domeny. Let's Encrypt jest urzędem certyfikacji, który oferuje bezpłatne certyfikaty.

W tym dokumencie używane są certyfikaty programistyczne z podpisem własnym do hostowania wstępnie utworzonych obrazów przez localhost. Instrukcje są podobne do instrukcji dotyczących używania certyfikatów produkcyjnych.

Dla certyfikatów produkcyjnych:

  • Narzędzie dotnet dev-certs nie jest wymagane.
  • Certyfikaty nie muszą być przechowywane w lokalizacji używanej w instrukcjach. Przechowuj certyfikaty w dowolnej lokalizacji poza katalogiem witryny.

Instrukcje zawarte w poniższej sekcji dotyczą montowania certyfikatów jako woluminów do kontenerów przy użyciu właściwości volumes w pliku docker-compose.yml. Certyfikaty można dodać do obrazów kontenerów za pomocą polecenia COPY w pliku Dockerfile, ale nie jest to zalecane. Kopiowanie certyfikatów do obrazu nie jest zalecane z następujących powodów:

  • To utrudnia użycie tego samego obrazu do testowania przy użyciu certyfikatów deweloperów.
  • Utrudnia to używanie tego samego obrazu dla Hosting przy użyciu certyfikatów produkcyjnych.
  • Istnieje znaczne ryzyko ujawnienia certyfikatu.

Uruchamianie kontenera z obsługą protokołu HTTPS przy użyciu narzędzia docker compose

Skorzystaj z poniższych instrukcji dotyczących konfiguracji systemu operacyjnego.

Windows z użyciem kontenerów Linux

Wygeneruj certyfikat i skonfiguruj komputer lokalny:

dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx"  -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

Poprzednie polecenie przy użyciu interfejsu wiersza polecenia platformy .NET:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

W poprzednich poleceniach zastąp $CREDENTIAL_PLACEHOLDER$ hasłem.

Utwórz plik docker-compose.debug.yml o następującej zawartości:

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

Hasło określone w pliku docker compose musi być zgodne z hasłem używanym dla certyfikatu.

Uruchom kontener przy użyciu ASP.NET Core skonfigurowanego dla protokołu HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

macOS lub Linux

Wygeneruj certyfikat i skonfiguruj komputer lokalny:

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

W systemie Linux dotnet dev-certs https --trust wymagany jest zestaw SDK platformy .NET 9 lub nowszej. W przypadku systemu Linux na platformie .NET 8.0.401 lub starszej wersji zestawu SDK zobacz dokumentację dystrybucji systemu Linux, aby ufać certyfikatowi.

W poprzednich poleceniach zastąp $CREDENTIAL_PLACEHOLDER$ hasłem.

Utwórz plik docker-compose.debug.yml o następującej zawartości:

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

Hasło określone w pliku docker compose musi być zgodne z hasłem używanym dla certyfikatu.

Uruchom kontener przy użyciu ASP.NET Core skonfigurowanego dla protokołu HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

System Windows z użyciem kontenerów systemu Windows

Wygeneruj certyfikat i skonfiguruj komputer lokalny:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

W poprzednich poleceniach zastąp $CREDENTIAL_PLACEHOLDER$ hasłem.

Utwórz plik docker-compose.debug.yml o następującej zawartości:

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

Hasło określone w pliku docker compose musi być zgodne z hasłem używanym dla certyfikatu.

Uruchom kontener przy użyciu ASP.NET Core skonfigurowanego dla protokołu HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

Zobacz też

ASP.NET Core domyślnie używa HTTPS. HTTPS opiera się na certyfikatach na potrzeby zaufania, tożsamości i szyfrowania.

W tym dokumencie wyjaśniono, jak uruchamiać wstępnie utworzone obrazy kontenerów przy użyciu protokołu HTTPS.

Zobacz Tworzenie aplikacji ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS, aby zapoznać się ze scenariuszami programowania.

Ten przykład wymaga klienta Docker w wersji 17.06 lub nowszej.

Wymagania wstępne

Zestaw .NET Core 2.2 SDK lub nowszy jest wymagany dla niektórych instrukcji w tym dokumencie.

Certyfikaty

Certyfikat z urzędu certyfikacji jest wymagany do hostowania produkcyjnego dla domeny. Let's Encrypt jest urzędem certyfikacji, który oferuje bezpłatne certyfikaty.

W tym dokumencie używane są certyfikaty programistyczne z podpisem własnym do hostowania wstępnie utworzonych obrazów przez localhost. Instrukcje są podobne do używania certyfikatów produkcyjnych.

Dla certyfikatów produkcyjnych:

  • Narzędzie dotnet dev-certs nie jest wymagane.
  • Certyfikaty nie muszą być przechowywane w lokalizacji używanej w instrukcjach. Przechowuj certyfikaty w dowolnej lokalizacji poza katalogiem witryny.

Instrukcje zawarte w poniższej sekcji montują certyfikaty do kontenerów jako wolumin przy użyciu właściwości volumes w pliku docker-compose.yml. Certyfikaty można dodać do obrazów kontenerów za pomocą COPY polecenia w pliku Dockerfile, ale nie jest to zalecane. Kopiowanie certyfikatów do obrazu nie jest zalecane z następujących powodów:

  • Użycie tego samego obrazu do testowania przy użyciu certyfikatów deweloperów jest trudne.
  • Utrudnia to użycie tego samego obrazu na potrzeby hostingu z certyfikatami produkcyjnymi.
  • Istnieje znaczne ryzyko ujawnienia certyfikatu.

Uruchamianie kontenera z obsługą protokołu HTTPS przy użyciu narzędzia docker compose

Skorzystaj z poniższych instrukcji dotyczących konfiguracji systemu operacyjnego.

Windows z kontenerami systemu Linux

Generowanie certyfikatu i konfigurowanie komputera lokalnego:

dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx"  -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

Poprzednie polecenie przy użyciu interfejsu wiersza polecenia platformy .NET:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

W poprzednich poleceniach zastąp $CREDENTIAL_PLACEHOLDER$ hasłem.

Utwórz plik docker-compose.debug.yml o następującej zawartości:

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

Hasło określone w pliku docker compose musi być zgodne z hasłem używanym dla certyfikatu. W poprzednich poleceniach zastąp -\0pw- hasłem.

Uruchom kontener przy użyciu ASP.NET Core skonfigurowanego dla protokołu HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

macOS lub Linux

Wygeneruj certyfikat i skonfiguruj komputer lokalny:

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

dotnet dev-certs https --trust program jest obsługiwany tylko w systemach macOS i Windows. Musisz zaufać certyfikatom w systemie Linux w sposób obsługiwany przez dystrybucję. Prawdopodobnie musisz ufać certyfikatowi w przeglądarce.

W poprzednich poleceniach zastąp $CREDENTIAL_PLACEHOLDER$ hasłem.

Utwórz plik docker-compose.debug.yml o następującej zawartości:

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

Hasło określone w pliku docker compose musi być zgodne z hasłem używanym dla certyfikatu.

Uruchom kontener przy użyciu ASP.NET Core skonfigurowanego dla protokołu HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

System Windows korzystający z kontenerów Windows

Wygeneruj certyfikat i skonfiguruj komputer lokalny:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

W poprzednich poleceniach zastąp $CREDENTIAL_PLACEHOLDER$ hasłem.

Utwórz plik docker-compose.debug.yml o następującej zawartości:

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

Zobacz też