Hosting von ASP.net Core Images mit docker über HTTPSHosting ASP.NET Core images with Docker over HTTPS

Von Rick AndersonBy Rick Anderson

ASP.net Core verwendet standardmäßig HTTPS.ASP.NET Core uses HTTPS by default. Https stützt sich auf Zertifikate für Vertrauenswürdigkeit, Identität und Verschlüsselung.HTTPS relies on certificates for trust, identity, and encryption.

In diesem Dokument wird erläutert, wie vorgefertigte Container Images mit HTTPS ausgeführt werden.This document explains how to run pre-built container images with HTTPS.

Weitere Informationen finden Sie unter Entwickeln von ASP.net Core Anwendungen mit docker über HTTPS für Entwicklungsszenarien.See Developing ASP.NET Core Applications with Docker over HTTPS for development scenarios.

Für dieses Beispiel ist docker 17,06 oder höher des docker-Clientserforderlich.This sample requires Docker 17.06 or later of the Docker client.

VoraussetzungenPrerequisites

Für einige der Anweisungen in diesem Dokument ist das .net Core 2,2 SDK oder höher erforderlich.The .NET Core 2.2 SDK or later is required for some of the instructions in this document.

ZertifikateCertificates

Ein Zertifikat von einer Zertifizierungs Stelle ist für das Produktions Hosting für eine Domäne erforderlich.A certificate from a certificate authority is required for production hosting for a domain. Let's Encrypt ist eine Zertifizierungsstelle, die kostenlose Zertifikate anbietet.Let's Encrypt is a certificate authority that offers free certificates.

In diesem Dokument werden selbst signierte Entwicklungs Zertifikate für das Hosting von vordefinierten Images verwendet localhost .This document uses self-signed development certificates for hosting pre-built images over localhost. Die Anweisungen ähneln der Verwendung von Produktions Zertifikaten.The instructions are similar to using production certificates.

Verwenden Sie dotnet dev-certs , um selbst signierte Zertifikate für Entwicklung und Tests zu erstellen.Use dotnet dev-certs to create self-signed certificates for development and testing.

Für produktionscerts:For production certs:

  • Das dotnet dev-certs Tool ist nicht erforderlich.The dotnet dev-certs tool is not required.
  • Zertifikate müssen nicht an dem Speicherort gespeichert werden, der in den Anweisungen verwendet wird.Certificates do not need to be stored in the location used in the instructions. Jeder Speicherort sollte funktionieren, obwohl das Speichern von Zertifikaten innerhalb Ihres Website Verzeichnisses nicht empfohlen wird.Any location should work, although storing certs within your site directory is not recommended.

Die Anweisungen im folgenden Abschnitt enthalten Informationen zum Einbinden von Zertifikaten in Container mithilfe der Docker- -v Befehlszeilenoption.The instructions contained in the following section volume mount certificates into containers using Docker's -v command-line option. Sie können Zertifikate in Container Images mit einem COPY Befehl in einer dockerfile-Datei hinzufügen, dies wird jedoch nicht empfohlen.You could add certificates into container images with a COPY command in a Dockerfile, but it's not recommended. Das Kopieren von Zertifikaten in ein Abbild wird aus den folgenden Gründen nicht empfohlen:Copying certificates into an image isn't recommended for the following reasons:

  • Es ist schwierig, das gleiche Image für Tests mit Entwickler Zertifikaten zu verwenden.It makes difficult to use the same image for testing with developer certificates.
  • Es ist schwierig, das gleiche Image für das Hosting mit Produktions Zertifikaten zu verwenden.It makes difficult to use the same image for Hosting with production certificates.
  • Es besteht ein erhebliches Risiko für die Offenlegung von Zertifikaten.There is significant risk of certificate disclosure.

Ausführen von vorgefertigten Container Images mit HTTPSRunning pre-built container images with HTTPS

Verwenden Sie die folgenden Anweisungen für die Betriebssystem Konfiguration.Use the following instructions for your operating system configuration.

Windows mithilfe von Linux-ContainernWindows using Linux containers

Zertifikat generieren und lokalen Computer konfigurieren:Generate certificate and configure local machine:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust

Ersetzen Sie in den vorangehenden Befehlen { password here } durch ein Kennwort.In the preceding commands, replace { password here } with a password.

Führen Sie das Container Image mit ASP.net Core für HTTPS in einer Befehlsshell konfiguriert aus:Run the container image with ASP.NET Core configured for HTTPS in a command shell:

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

Wenn Sie PowerShellverwenden, ersetzen Sie %USERPROFILE% durch $env:USERPROFILE .When using PowerShell, replace %USERPROFILE% with $env:USERPROFILE.

Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird.The password must match the password used for the certificate.

Hinweis: das Zertifikat muss in diesem Fall eine .pfx Datei sein.Note: The certificate in this case must be a .pfx file. Das Verwenden einer- .crt oder- .key Datei mit oder ohne das Kennwort wird mit dem Beispiel Container nicht unterstützt.Utilizing a .crt or .key file with or without the password isn't supported with the sample container. Wenn Sie z. b. eine .crt Datei angeben, gibt der Container möglicherweise Fehlermeldungen zurück, z. b. "der Server Modus-SSL muss ein Zertifikat mit dem zugeordneten privaten Schlüssel verwenden".For example, when specifying a .crt file, the container may return error messages such as 'The server mode SSL must use a certificate with the associated private key.'. Überprüfen Sie bei Verwendung von WSLden Bereitstellungspfad, um sicherzustellen, dass das Zertifikat ordnungsgemäß geladenWhen using WSL, validate the mount path to ensure that the certificate loads correctly.

macOS oder LinuxmacOS or Linux

Zertifikat generieren und lokalen Computer konfigurieren:Generate certificate and configure local machine:

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust

dotnet dev-certs https --trust wird nur unter macOS und Windows unterstützt.dotnet dev-certs https --trust is only supported on macOS and Windows. Sie müssen Zertifikate unter Linux in der von Ihrer Distribution unterstützten Weise als vertrauenswürdig einstufen.You need to trust certs on Linux in the way that is supported by your distribution. Es ist wahrscheinlich, dass Sie das Zertifikat in Ihrem Browser als vertrauenswürdig einstufen müssen.It is likely that you need to trust the certificate in your browser.

Ersetzen Sie in den vorangehenden Befehlen { password here } durch ein Kennwort.In the preceding commands, replace { password here } with a password.

Führen Sie das Container Image mit für HTTPS konfigurierten ASP.net Core aus:Run the container image with ASP.NET Core configured for HTTPS:

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

Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird.The password must match the password used for the certificate.

Windows mithilfe von Windows-ContainernWindows using Windows containers

Zertifikat generieren und lokalen Computer konfigurieren:Generate certificate and configure local machine:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust

Ersetzen Sie in den vorangehenden Befehlen { password here } durch ein Kennwort.In the preceding commands, replace { password here } with a password. Wenn Sie PowerShellverwenden, ersetzen Sie %USERPROFILE% durch $env:USERPROFILE .When using PowerShell, replace %USERPROFILE% with $env:USERPROFILE.

Führen Sie das Container Image mit für HTTPS konfigurierten ASP.net Core aus:Run the container image with ASP.NET Core configured for HTTPS:

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

Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird.The password must match the password used for the certificate. Wenn Sie PowerShellverwenden, ersetzen Sie %USERPROFILE% durch $env:USERPROFILE .When using PowerShell, replace %USERPROFILE% with $env:USERPROFILE.