Hosting di immagini ASP.NET Core con Docker su HTTPS

Di Rick Anderson

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

Questo documento illustra come eseguire immagini del contenitore predefinite con HTTPS usando l'interfaccia della riga di comando .NET. Per istruzioni su come eseguire Docker nello sviluppo con Visual Studio, vedere Sviluppo di applicazioni principali ASP.NET con Docker su HTTPS.

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

Prerequisiti

.NET SDK corrente.

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. Il certificato generato da dotnet dev-certs è destinato all'uso solo con localhost e non deve essere usato in un ambiente come Kubernetes. Per supportare HTTPS all'interno di un cluster Kubernetes, usare gli strumenti forniti da Gestisci certificati TLS in un cluster per configurare TLS all'interno dei pod.

Usare dotnet dev-certs per creare certificati autofirmato per lo sviluppo e il test.

Per i certificati di produzione:

  • Lo dotnet dev-certs strumento non è obbligatorio.
  • I certificati non devono essere archiviati nel percorso usato nelle istruzioni. Qualsiasi posizione dovrebbe funzionare, anche se l'archiviazione dei certificati all'interno della directory del sito non è consigliata.

Le istruzioni contenute nella sezione seguente montano i certificati in contenitori usando l'opzione della riga di comando di -v Docker. È 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:

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

Esecuzione di immagini del contenitore predefinite con HTTPS

Usare le istruzioni seguenti per la configurazione del sistema operativo.

Windows con contenitori Linux

Generare un 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.

Eseguire l'immagine del contenitore con ASP.NET Core configurato per HTTPS in una shell dei comandi:

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp

Nel codice precedente sostituire <CREDENTIAL_PLACEHOLDER> con la password. La password deve corrispondere alla password usata per il certificato.

Quando si usa PowerShell, sostituire %USERPROFILE% con $env:USERPROFILE.

Nota: il certificato in questo caso deve essere un .pfx file. L'uso di un .crt file o .key con o senza la password non è supportato con il contenitore di esempio. Ad esempio, quando si specifica un .crt file, il contenitore può restituire messaggi di errore, ad esempio "Ssl in modalità server deve usare un certificato con la chiave privata associata". Quando si usa WSL, convalidare il percorso di montaggio per assicurarsi che il certificato venga caricato correttamente.

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.

Eseguire l'immagine del contenitore con ASP.NET Core configurato per HTTPS:

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v ${HOME}/.aspnet/https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp

Nel codice precedente sostituire <CREDENTIAL_PLACEHOLDER> con la password. La password deve corrispondere alla password usata per il certificato.

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. Quando si usa PowerShell, sostituire %USERPROFILE% con $env:USERPROFILE.

Eseguire l'immagine del contenitore con ASP.NET Core configurato per HTTPS:

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=c:\https\aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:C:\https\ --user ContainerAdministrator mcr.microsoft.com/dotnet/samples:aspnetapp

NOTA:<CREDENTIAL_PLACEHOLDER> è un segnaposto per la password predefinita dei Kestrel certificati.

La password deve corrispondere alla password usata per il certificato. Quando si usa PowerShell, sostituire %USERPROFILE% con $env:USERPROFILE.

Developing ASP.NET Core Applications with Docker over HTTPS (Sviluppo di applicazioni ASP.NET Core con Docker su HTTPS)

Per informazioni ed esempi su come sviluppare applicazioni ASP.NET Core con HTTPS nei contenitori Docker, vedere Sviluppo di applicazioni ASP.NET Core con Docker.

Vedi anche