Hosten van ASP.NET Core-installatiekopieën met Docker via HTTPS
Door Rick Anderson
ASP.NET Core maakt standaard gebruik van HTTPS-. HTTPS- is afhankelijk van certificaten voor vertrouwen, identiteit en versleuteling.
In dit document wordt uitgelegd hoe u vooraf gebouwde containerinstallatiekopieën uitvoert met HTTPS met behulp van de .NET-opdrachtregelinterface (CLI). Zie Ontwikkelen ASP.NET Core Applications met Docker via HTTPSvoor instructies over het uitvoeren van Docker in ontwikkeling met Visual Studio.
Voor dit voorbeeld is Docker 17.06 of hoger van de Docker-clientvereist.
Voorwaarden
De huidige .NET SDK.
Certificaten
Een certificaat van een certificeringsinstantie is vereist voor productiehosting voor een domein. Let's Encrypt is een certificeringsinstantie die gratis certificaten biedt.
In dit document worden zelfondertekende ontwikkelingscertificaten gebruikt voor het hosten van vooraf gemaakte images via localhost
. De instructies zijn vergelijkbaar met het gebruik van productiecertificaten. Het certificaat dat door dotnet dev-certs
wordt gegenereerd, is alleen bedoeld voor gebruik met localhost
en moet niet worden gebruikt in een omgeving zoals Kubernetes. Als u HTTPS in een Kubernetes-cluster wilt ondersteunen, gebruikt u de hulpprogramma's van TLS-certificaten beheren in een cluster om TLS in pods in te stellen.
Gebruik dotnet dev-certs
om zelfondertekende certificaten te maken voor ontwikkeling en testen.
Voor productiecertificaten:
- Het hulpprogramma
dotnet dev-certs
is niet vereist. - Certificaten hoeven niet te worden opgeslagen op de locatie die in de instructies wordt gebruikt. Elke locatie moet werken, hoewel het opslaan van certificaten in uw sitemap niet wordt aanbevolen.
In de instructies in de volgende sectie worden volume-mountcertificaten in containers geplaatst met behulp van de -v
opdrachtregeloptie van Docker. U kunt certificaten toevoegen aan containerafbeeldingen met een COPY
commando in een Dockerfile, maar dit wordt niet aanbevolen. Het kopiëren van certificaten naar een afbeelding wordt om de volgende redenen niet aanbevolen:
- Het is moeilijk om dezelfde afbeelding te gebruiken voor het testen met ontwikkelaarscertificaten.
- Het is moeilijk om dezelfde image te gebruiken voor hosting met productiecertificaten.
- Er bestaat een aanzienlijk risico op openbaarmaking van certificaten.
Vooraf gebouwde containerafbeeldingen uitvoeren met HTTPS
Gebruik de volgende instructies voor de configuratie van uw besturingssysteem.
Windows met Behulp van Linux-containers
Genereer een certificaat en configureer de lokale machine:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Vervang in de voorgaande opdrachten <CREDENTIAL_PLACEHOLDER>
door een wachtwoord.
Voer de containerafbeelding uit met ASP.NET Core, geconfigureerd voor HTTPS, in een opdrachtregel.
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
Vervang in de voorgaande code <CREDENTIAL_PLACEHOLDER>
door het wachtwoord. Het wachtwoord moet overeenkomen met het wachtwoord dat voor het certificaat wordt gebruikt.
Wanneer u PowerShell-gebruikt, vervangt u %USERPROFILE%
door $env:USERPROFILE
.
Opmerking: het certificaat moet in dit geval een .pfx
-bestand zijn. Het gebruik van een .crt
- of .key
-bestand met of zonder het wachtwoord wordt niet ondersteund met de voorbeeldcontainer. Wanneer u bijvoorbeeld een .crt
-bestand opgeeft, kan de container foutberichten retourneren, zoals 'De servermodus SSL moet een certificaat met de bijbehorende persoonlijke sleutel gebruiken'. Wanneer u WSL-gebruikt, valideert u het koppelingspad om ervoor te zorgen dat het certificaat correct wordt geladen.
macOS of Linux
Certificaat genereren en lokale computer configureren:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Voor Linux is voor dotnet dev-certs https --trust
.NET 9 SDK of hoger vereist. Voor Linux op .NET 8.0.401 SDK en eerder raadpleegt u de documentatie van uw Linux-distributie voor het vertrouwen van een certificaat.
Vervang in de voorgaande opdrachten <CREDENTIAL_PLACEHOLDER>
door een wachtwoord.
Draai de containerimage met ASP.NET Core geconfigureerd voor 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
Vervang in de voorgaande code <CREDENTIAL_PLACEHOLDER>
door het wachtwoord. Het wachtwoord moet overeenkomen met het wachtwoord dat voor het certificaat wordt gebruikt.
Windows met Windows-containers
Certificaat genereren en lokale computer configureren:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Vervang in de voorgaande opdrachten <CREDENTIAL_PLACEHOLDER>
door een wachtwoord. Wanneer u PowerShell-gebruikt, vervangt u %USERPROFILE%
door $env:USERPROFILE
.
Voer de containerafbeelding uit met ASP.NET Core geconfigureerd voor 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
OPMERKING:<CREDENTIAL_PLACEHOLDER>
is een tijdelijke aanduiding voor het standaardwachtwoord voor de Kestrel certificaten.
Het wachtwoord moet overeenkomen met het wachtwoord dat voor het certificaat wordt gebruikt. Wanneer u PowerShell-gebruikt, vervangt u %USERPROFILE%
door $env:USERPROFILE
.
Ontwikkelen van ASP.NET Core-toepassingen met Docker via HTTPS
Zie Ontwikkelen van ASP.NET Core-toepassingen met Docker via HTTPS voor informatie en voorbeelden over het ontwikkelen van ASP.NET Core-toepassingen met HTTPS in Docker-containers.
Zie ook
ASP.NET Core maakt standaard gebruik van HTTPS-. HTTPS- is afhankelijk van certificaten voor vertrouwen, identiteit en versleuteling.
In dit document wordt uitgelegd hoe u vooraf gebouwde containerinstallatiekopieën uitvoert met HTTPS met behulp van de .NET-opdrachtregelinterface (CLI). Zie Ontwikkelen ASP.NET Core Applications met Docker via HTTPSvoor instructies over het uitvoeren van Docker in ontwikkeling met Visual Studio.
Voor dit voorbeeld is Docker 17.06 of hoger van de Docker-clientvereist.
Voorwaarden
De huidige .NET SDK.
Certificaten
Een certificaat van een certificeringsinstantie is vereist voor productiehosting voor een domein. Let's Encrypt is een certificeringsinstantie die gratis certificaten biedt.
In dit document worden zelfondertekende ontwikkelingscertificaten gebruikt voor het hosten van vooraf gebouwde afbeeldingen over localhost
. De instructies zijn vergelijkbaar met het gebruik van productiecertificaten. Het certificaat dat door dotnet dev-certs
wordt gegenereerd, is alleen bedoeld voor gebruik met localhost
en moet niet worden gebruikt in een omgeving zoals Kubernetes. Als u HTTPS in een Kubernetes-cluster wilt ondersteunen, gebruikt u de hulpprogramma's van TLS-certificaten beheren in een cluster om TLS in pods in te stellen.
Gebruik dotnet dev-certs
om zelfondertekende certificaten te maken voor ontwikkeling en testen.
Voor productiecertificaten:
- Het hulpprogramma
dotnet dev-certs
is niet vereist. - Certificaten hoeven niet te worden opgeslagen op de locatie die in de instructies wordt gebruikt. Elke locatie moet werken, hoewel het opslaan van certificaten in uw sitemap niet wordt aanbevolen.
De instructies in de volgende sectie beschrijven hoe volumekoppelingscertificaten in containers worden geplaatst met behulp van de -v
-opdrachtregeloptie van Docker. U kunt certificaten toevoegen aan containerafbeeldingen met een COPY
commando in een Dockerfile, maar het wordt niet aanbevolen. Het kopiëren van certificaten naar een afbeelding wordt om de volgende redenen niet aanbevolen:
- Het is moeilijk om dezelfde afbeelding te gebruiken voor het testen met ontwikkelaarscertificaten.
- Het is moeilijk om dezelfde systeemafbeelding te gebruiken voor hosting met productiecertificaten.
- Er bestaat een aanzienlijk risico op openbaarmaking van certificaten.
Voorafgebouwde containerafbeeldingen uitvoeren met HTTPS
Gebruik de volgende instructies voor de configuratie van uw besturingssysteem.
Windows met Behulp van Linux-containers
Genereer een certificaat en configureer de lokale machine:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Vervang in de voorgaande opdrachten <CREDENTIAL_PLACEHOLDER>
door een wachtwoord.
Voer de containerafbeelding uit met ASP.NET Core geconfigureerd voor HTTPS in een opdrachtprompt:
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
Vervang in de voorgaande code <CREDENTIAL_PLACEHOLDER>
door het wachtwoord. Het wachtwoord moet overeenkomen met het wachtwoord dat voor het certificaat wordt gebruikt.
Wanneer u PowerShell-gebruikt, vervangt u %USERPROFILE%
door $env:USERPROFILE
.
Opmerking: het certificaat moet in dit geval een .pfx
-bestand zijn. Het gebruik van een .crt
- of .key
-bestand met of zonder het wachtwoord wordt niet ondersteund met de voorbeeldcontainer. Wanneer u bijvoorbeeld een .crt
-bestand opgeeft, kan de container foutberichten retourneren, zoals 'De servermodus SSL moet een certificaat met de bijbehorende persoonlijke sleutel gebruiken'. Wanneer u WSL-gebruikt, valideert u het koppelingspad om ervoor te zorgen dat het certificaat correct wordt geladen.
macOS of Linux
Certificaat genereren en lokale computer configureren:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
dotnet dev-certs https --trust
wordt alleen ondersteund in macOS en Windows. U moet certificaten in Linux vertrouwen op de manier die wordt ondersteund door uw distributie. Waarschijnlijk moet u het certificaat in uw browser vertrouwen.
Vervang in de voorgaande opdrachten <CREDENTIAL_PLACEHOLDER>
door een wachtwoord.
Start de containerimage met ASP.NET Core geconfigureerd voor 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
Vervang in de voorgaande code <CREDENTIAL_PLACEHOLDER>
door het wachtwoord. Het wachtwoord moet overeenkomen met het wachtwoord dat voor het certificaat wordt gebruikt.
Windows met Windows-containers
Certificaat genereren en lokale computer configureren:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Vervang in de voorgaande opdrachten <CREDENTIAL_PLACEHOLDER>
door een wachtwoord. Wanneer u PowerShell-gebruikt, vervangt u %USERPROFILE%
door $env:USERPROFILE
.
Voer de containerafbeelding uit met ASP.NET Core geconfigureerd voor 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
OPMERKING:<CREDENTIAL_PLACEHOLDER>
is een tijdelijke aanduiding voor het standaardwachtwoord voor de Kestrel certificaten.
Het wachtwoord moet overeenkomen met het wachtwoord dat voor het certificaat wordt gebruikt. Wanneer u PowerShell-gebruikt, vervangt u %USERPROFILE%
door $env:USERPROFILE
.
Ontwikkelen van ASP.NET Core-toepassingen met Docker via HTTPS
Zie Ontwikkelen van ASP.NET Core-toepassingen met Docker via HTTPS voor informatie en voorbeelden over het ontwikkelen van ASP.NET Core-toepassingen met HTTPS in Docker-containers.