Delen via


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.

Zie ook