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

ASP.NET Core domyślnie używa protokołu HTTPS. Protokół HTTPS opiera się na certyfikatach 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 podstawowych ASP.NET za pomocą platformy Docker za pośrednictwem protokołu HTTPS , aby zapoznać się ze scenariuszami programowania.

Ten przykład wymaga platformy Docker 17.06 lub nowszej klienta platformy Docker.

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 za pośrednictwem programu localhost. Instrukcje są podobne do używania certyfikatów produkcyjnych.

W przypadku 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 spoza katalogu lokacji.

Instrukcje zawarte w poniższej sekcji woluminu instalacji certyfikatów do kontenerów przy użyciu volumes właściwości w 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.
  • Trudno jest używać tego samego obrazu do hostowania 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.

System Windows korzystający z kontenerów 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$ ciąg 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

macOS lub Linux

Generowanie certyfikatu i konfigurowanie komputera lokalnego:

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. Certyfikaty w systemie Linux muszą być zaufane w sposób obsługiwany przez dystrybucję. Prawdopodobnie musisz ufać certyfikatowi w przeglądarce.

W poprzednich poleceniach zastąp $CREDENTIAL_PLACEHOLDER$ ciąg 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 z użyciem kontenerów systemu Windows

Generowanie certyfikatu i konfigurowanie komputera lokalnego:

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$ ciąg 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=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 protokołu HTTPS. Protokół HTTPS opiera się na certyfikatach 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 podstawowych ASP.NET za pomocą platformy Docker za pośrednictwem protokołu HTTPS , aby zapoznać się ze scenariuszami programowania.

Ten przykład wymaga platformy Docker 17.06 lub nowszej klienta platformy Docker.

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 za pośrednictwem programu localhost. Instrukcje są podobne do używania certyfikatów produkcyjnych.

W przypadku 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 spoza katalogu lokacji.

Instrukcje zawarte w poniższej sekcji woluminu instalacji certyfikatów do kontenerów przy użyciu volumes właściwości w 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.
  • Trudno jest używać tego samego obrazu do hostowania 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.

System Windows korzystający z kontenerów 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$ ciąg 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

macOS lub Linux

Generowanie certyfikatu i konfigurowanie komputera lokalnego:

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. Certyfikaty w systemie Linux muszą być zaufane w sposób obsługiwany przez dystrybucję. Prawdopodobnie musisz ufać certyfikatowi w przeglądarce.

W poprzednich poleceniach zastąp $CREDENTIAL_PLACEHOLDER$ ciąg 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 z użyciem kontenerów systemu Windows

Generowanie certyfikatu i konfigurowanie komputera lokalnego:

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$ ciąg 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=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ż