Driva ASP.NET Core-avbildningar med Docker över HTTPS
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
ASP.NET Core