Condividi tramite


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 di contenitori predefinite con HTTPS.

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

Questo esempio richiede Docker 17.06 o versione successiva del client Docker.

Prerequisiti

. NET Core 2.2 SDK o versione successiva è necessario 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 autofirmato per l'hosting di immagini predefinite 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 montano i certificati in contenitori usando la volumes proprietà in docker-compose.yml. È possibile aggiungere certificati alle immagini del contenitore con un COPY comando 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 l'interfaccia della riga di comando di .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=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

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 che usa i contenitori di 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=password
      - 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