Dela via


Driva ASP.NET Core-avbildningar med Docker över HTTPS

Av Rick Anderson

ASP.NET Core använder HTTPS som standard. HTTPS- förlitar sig på certifikat för förtroende, identitet och kryptering.

Det här dokumentet förklarar hur du kör fördefinierade containeravbildningar med HTTPS med hjälp av .NET-kommandoradsgränssnittet (CLI). Anvisningar om hur du kör Docker under utveckling med Visual Studio finns i Utveckla ASP.NET Core-program med Docker via HTTPS.

Det här exemplet kräver Docker 17.06 eller senare av Docker-klienten.

Förutsättningar

Den nuvarande .NET SDK.

Certifikaten

Ett certifikat från en certifikatutfärdare behövs för produktionshosting för en domän. Let's Encrypt är en certifikatutfärdare som erbjuder kostnadsfria certifikat.

Det här dokumentet använder självsignerade utvecklingscertifikat för att hosta förbyggda bilder via localhost. Instruktionerna liknar användning av produktionscertifikat. Certifikatet som genereras av dotnet dev-certs används endast med localhost och bör inte användas i en miljö som Kubernetes. Om du vill stödja HTTPS i ett Kubernetes-kluster använder du de verktyg som tillhandahålls av Hantera TLS-certifikat i ett kluster för att konfigurera TLS i poddar.

Använd dotnet dev-certs för att skapa självsignerade certifikat för utveckling och testning.

För produktionscertifikat:

  • Verktyget dotnet dev-certs krävs inte.
  • Certifikat behöver inte lagras på den plats som används i anvisningarna. Alla platser bör fungera, även om det inte rekommenderas att lagra certifikat i webbplatskatalogen.

Anvisningarna i följande avsnitt innehåller volymmonteringscertifikat i containrar med hjälp av Dockers -v kommandoradsalternativ. Du kan lägga till certifikat i containeravbildningar med ett COPY-kommando i en Dockerfile, men det rekommenderas inte. Kopiering av certifikat till en avbildning rekommenderas inte av följande skäl:

  • Det är svårt att använda samma avbildning för testning med utvecklarcertifikat.
  • Det är svårt att använda samma bild vid hosting med produktionscertifikat.
  • Det finns en betydande risk för att certifikatet avslöjas.

Köra förbyggda containeravbildningar med HTTPS

Använd följande instruktioner för konfigurationen av operativsystemet.

Windows med Linux-containrar

Generera ett certifikat och konfigurera den lokala datorn:

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

Ersätt <CREDENTIAL_PLACEHOLDER> med ett lösenord i föregående kommandon.

Kör containeravbildningen med ASP.NET Core konfigurerad för HTTPS i ett kommandogränssnitt:

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

Ersätt <CREDENTIAL_PLACEHOLDER> med lösenordet i föregående kod. Lösenordet måste matcha lösenordet som används för certifikatet.

När du använder PowerShellersätter du %USERPROFILE% med $env:USERPROFILE.

Obs! Certifikatet i det här fallet måste vara en .pfx fil. Användning av en .crt- eller .key-fil med eller utan lösenord stöds inte med exempelcontainern. När du till exempel anger en .crt fil kan containern returnera felmeddelanden som "SSL för serverläge måste använda ett certifikat med den associerade privata nyckeln.". När du använder WSL, validera monteringssökvägen för att säkerställa att certifikatet läses in korrekt.

macOS eller Linux

Generera certifikat och konfigurera den lokala datorn:

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

I Linux kräver dotnet dev-certs https --trust .NET 9 SDK eller senare. För Linux på .NET 8.0.401 SDK och tidigare kan du läsa dokumentationen för Linux-distributionen för att lita på ett certifikat.

Ersätt <CREDENTIAL_PLACEHOLDER> med ett lösenord i föregående kommandon.

Kör containeravbildningen med ASP.NET Core konfigurerad för 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

Ersätt <CREDENTIAL_PLACEHOLDER> med lösenordet i föregående kod. Lösenordet måste matcha lösenordet som används för certifikatet.

Windows med Windows-kontainrar

Generera certifikat och konfigurera den lokala datorn:

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

Ersätt <CREDENTIAL_PLACEHOLDER> med ett lösenord i föregående kommandon. När du använder PowerShellersätter du %USERPROFILE% med $env:USERPROFILE.

Kör containeravbildningen med ASP.NET Core konfigurerad för 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

OBS!<CREDENTIAL_PLACEHOLDER> är en platshållare för standardlösenordet för Kestrel certifikat.

Lösenordet måste matcha lösenordet som används för certifikatet. När du använder PowerShellersätter du %USERPROFILE% med $env:USERPROFILE.

Utveckla ASP.NET Core-program med Docker via HTTPS

Se Utveckla ASP.NET Core-program med Docker via HTTPS- för information och exempel på hur du utvecklar ASP.NET Core-program med HTTPS i Docker-containrar.

Se även

ASP.NET Core använder HTTPS som standard. HTTPS- förlitar sig på certifikat för förtroende, identitet och kryptering.

Det här dokumentet förklarar hur du kör fördefinierade containeravbildningar med HTTPS med hjälp av .NET-kommandoradsgränssnittet (CLI). Anvisningar om hur du kör Docker under utveckling med Visual Studio finns i Utveckla ASP.NET Core-program med Docker via HTTPS.

Det här exemplet kräver Docker 17.06 eller senare av Docker-klienten.

Förutsättningar

Den aktuella .NET SDK.

Certifikaten

Ett certifikat från en certifikatutfärdare krävs för produktionshosting för en domän. Let's Encrypt är en certifikatutfärdare som erbjuder kostnadsfria certifikat.

Det här dokumentet använder självsignerade utvecklingscertifikat för att hosta fördefinierade avbildningar över localhost. Instruktionerna liknar användning av produktionscertifikat. Certifikatet som genereras av dotnet dev-certs används endast med localhost och bör inte användas i en miljö som Kubernetes. Om du vill stödja HTTPS i ett Kubernetes-kluster använder du de verktyg som tillhandahålls av Hantera TLS-certifikat i ett kluster för att konfigurera TLS i poddar.

Använd dotnet dev-certs för att skapa självsignerade certifikat för utveckling och testning.

För produktionscertifikat:

  • Verktyget dotnet dev-certs krävs inte.
  • Certifikat behöver inte lagras på den plats som används i anvisningarna. Alla platser bör fungera, även om det inte rekommenderas att lagra certifikat i webbplatskatalogen.

Anvisningarna i följande avsnitt innehåller volymmonteringscertifikat i containrar med hjälp av Dockers -v kommandoradsalternativ. Du kan lägga till certifikat i containeravbildningar med ett COPY-kommando i en Dockerfile, men det rekommenderas inte. Kopiering av certifikat till en avbildning rekommenderas inte av följande skäl:

  • Det är svårt att använda samma avbildning för testning med utvecklarcertifikat.
  • Det är svårt att använda samma avbildning för Hosting med produktionscertifikat.
  • Det finns en betydande risk för att certifikatet avslöjas.

Köra fördefinierade containeravbildningar med HTTPS

Använd följande instruktioner för konfigurationen av operativsystemet.

Windows med Linux-containrar

Generera ett certifikat och konfigurera den lokala datorn:

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

Ersätt <CREDENTIAL_PLACEHOLDER> med ett lösenord i föregående kommandon.

Kör containeravbildningen med ASP.NET Core konfigurerad för HTTPS i ett kommandogränssnitt:

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

Ersätt <CREDENTIAL_PLACEHOLDER> med lösenordet i föregående kod. Lösenordet måste matcha lösenordet som används för certifikatet.

När du använder PowerShellersätter du %USERPROFILE% med $env:USERPROFILE.

Obs! Certifikatet i det här fallet måste vara en .pfx fil. Användning av en .crt- eller .key-fil med eller utan lösenord stöds inte med exempelcontainern. När du till exempel anger en .crt fil kan containern returnera felmeddelanden som "SSL för serverläge måste använda ett certifikat med den associerade privata nyckeln.". När du använder WSL, kontrollera monteringssökvägen för att säkerställa att certifikatet läses in korrekt.

macOS eller Linux

Generera certifikat och konfigurera den lokala datorn:

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

dotnet dev-certs https --trust stöds endast i macOS och Windows. Du måste lita på certifikat på Linux på det sätt som stöds av distributionen. Det är troligt att du behöver lita på certifikatet i webbläsaren.

Ersätt <CREDENTIAL_PLACEHOLDER> med ett lösenord i föregående kommandon.

Kör containeravbildningen med ASP.NET Core konfigurerad för 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

Ersätt <CREDENTIAL_PLACEHOLDER> med lösenordet i föregående kod. Lösenordet måste matcha lösenordet som används för certifikatet.

Windows med Windows-containrar

Generera certifikat och konfigurera den lokala datorn:

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

Ersätt <CREDENTIAL_PLACEHOLDER> med ett lösenord i föregående kommandon. När du använder PowerShellersätter du %USERPROFILE% med $env:USERPROFILE.

Kör containeravbildningen med ASP.NET Core konfigurerad för 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

OBS!<CREDENTIAL_PLACEHOLDER> är en platshållare för standardlösenordet för Kestrel certifikat.

Lösenordet måste matcha lösenordet som används för certifikatet. När du använder PowerShellersätter du %USERPROFILE% med $env:USERPROFILE.

Utveckla ASP.NET Core-program med Docker via HTTPS

Se Utveckla ASP.NET Core-program med Docker via HTTPS- för information och exempel på hur du utvecklar ASP.NET Core-program med HTTPS i Docker-containrar.

Se även