Hosting di immagini ASP.NET Core con Docker Compose su HTTPS

ASP.NET Core usa HTTPS per impostazione predefinita. HTTPS si basa su certificati per attendibilità, identità e crittografia.

Questo documento illustra come eseguire immagini container predefinite con HTTPS.

Vedere Sviluppo di applicazioni ASP.NET Core con Docker su HTTPS per scenari di sviluppo.

Questo esempio richiede Docker 17.06 o versioni successive del client Docker.

Prerequisiti

Il .NET Core 2.2 SDK o versione successiva è richiesto per alcune delle istruzioni contenute in questo documento.

Certificati

Un certificato di un'autorità di certificazione è necessario per l'hosting di produzione per un dominio. Let's Encrypt è un'autorità di certificazione che offre certificati gratuiti.

Questo documento usa certificati di sviluppo autofirmati per l'hosting di immagini precompilate su localhost. Le istruzioni sono simili all'uso dei certificati di produzione.

Per i certificati di produzione:

  • Lo dotnet dev-certs strumento non è obbligatorio.
  • I certificati non devono essere archiviati nel percorso usato nelle istruzioni. Archiviare i certificati in qualsiasi posizione esterna alla directory del sito.

Le istruzioni contenute nella sezione seguente descrivono come montare i certificati nei contenitori usando la proprietà volumes in docker-compose.yml. È possibile aggiungere certificati alle immagini del contenitore con un comando COPY in un Dockerfile, ma non è consigliabile. La copia dei certificati in un'immagine non è consigliata per i motivi seguenti:

  • Rende difficile usare la stessa immagine per i test con i certificati per sviluppatori.
  • Rende difficile usare la stessa immagine per l'hosting con certificati di produzione.
  • Esiste un rischio significativo di divulgazione dei certificati.

Avviare un contenitore con supporto HTTPS con Docker Compose

Usare le istruzioni seguenti per la configurazione del sistema operativo.

Windows che usa contenitori Linux

Generare il certificato e configurare il computer locale:

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

Il comando precedente che usa la CLI .NET:

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

Nei comandi precedenti sostituire $CREDENTIAL_PLACEHOLDER$ con una password.

Creare un file docker-compose.debug.yml con il contenuto seguente:

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

La password specificata nel file docker compose deve corrispondere alla password usata per il certificato.

Avviare il contenitore con ASP.NET Core configurato per HTTPS:

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

macOS o Linux

Genera il certificato e configura il computer locale:

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

Su Linux, .NET 9 o versione successiva è richiesto. Per Linux su .NET 8.0.401 o versioni precedenti dell'SDK, vedere la documentazione della distribuzione Linux per considerare attendibile un certificato.

Nei comandi precedenti sostituire $CREDENTIAL_PLACEHOLDER$ con una password.

Creare un file docker-compose.debug.yml con il contenuto seguente:

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

La password specificata nel file docker compose deve corrispondere alla password usata per il certificato.

Avviare il contenitore con ASP.NET Core configurato per HTTPS:

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

Windows con contenitori Windows

Genera il certificato e configura il computer locale:

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

Nei comandi precedenti sostituire $CREDENTIAL_PLACEHOLDER$ con una password.

Creare un file docker-compose.debug.yml con il contenuto seguente:

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

La password specificata nel file docker compose deve corrispondere alla password usata per il certificato.

Avviare il contenitore con ASP.NET Core configurato per HTTPS:

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

Vedi anche

ASP.NET Core usa HTTPS per impostazione predefinita. HTTPS si basa su certificati per attendibilità, identità e crittografia.

Questo documento illustra come eseguire immagini container predefinite con HTTPS.

Vedere Sviluppo di applicazioni ASP.NET Core con Docker su HTTPS per scenari di sviluppo.

Questo esempio richiede Docker 17.06 o versioni successive del client Docker.

Prerequisiti

L'.NET Core 2.2 SDK o versione successiva è richiesto per alcune delle istruzioni contenute in questo documento.

Certificati

Un certificato di un'autorità di certificazione è necessario per l'hosting di produzione per un dominio. Let's Encrypt è un'autorità di certificazione che offre certificati gratuiti.

Questo documento usa certificati di sviluppo autofirmati per l'hosting di immagini predefinite su localhost. Le istruzioni sono simili a quelle per l'uso dei certificati di produzione.

Per i certificati di produzione:

  • Lo dotnet dev-certs strumento non è obbligatorio.
  • I certificati non devono essere archiviati nel percorso usato nelle istruzioni. Archiviare i certificati in qualsiasi posizione esterna alla directory del sito.

Le istruzioni contenute nella sezione seguente descrivono come montare i certificati nei contenitori usando la proprietà volumes in docker-compose.yml. È possibile aggiungere certificati alle immagini del contenitore con un comando COPY in un Dockerfile, ma non è consigliabile. La copia dei certificati in un'immagine non è consigliata per i motivi seguenti:

  • Rende difficile usare la stessa immagine per i test con i certificati per sviluppatori.
  • Rende difficile usare la stessa immagine per l'hosting con certificati di produzione.
  • Esiste un rischio significativo di divulgazione dei certificati.

Avvio di un contenitore con supporto https con docker compose

Usare le istruzioni seguenti per la configurazione del sistema operativo.

Windows con contenitori Linux

Generare il certificato e configurare il computer locale:

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

Comando precedente che usa .NET CLI:

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

Nei comandi precedenti sostituire $CREDENTIAL_PLACEHOLDER$ con una password.

Creare un file docker-compose.debug.yml con il contenuto seguente:

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

La password specificata nel file docker compose deve corrispondere alla password usata per il certificato. Nei comandi precedenti sostituire -\0pw- con una password.

Avviare il contenitore con ASP.NET Core configurato per HTTPS:

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

macOS o Linux

Generare il certificato e configurare il computer locale:

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

dotnet dev-certs https --trust è supportato solo in macOS e Windows. È necessario considerare attendibili i certificati in Linux nel modo supportato dalla distribuzione. È probabile che sia necessario considerare attendibile il certificato nel browser.

Nei comandi precedenti sostituire $CREDENTIAL_PLACEHOLDER$ con una password.

Creare un file docker-compose.debug.yml con il contenuto seguente:

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

La password specificata nel file docker compose deve corrispondere alla password usata per il certificato.

Avviare il contenitore con ASP.NET Core configurato per HTTPS:

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

Windows con contenitori Windows

Generare il certificato e configurare il computer locale:

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

Nei comandi precedenti sostituire $CREDENTIAL_PLACEHOLDER$ con una password.

Creare un file docker-compose.debug.yml con il contenuto seguente:

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

Vedi anche