Hosten ASP.NET Core Images mit Docker über HTTPS

Von Rick Anderson

ASP.NET Core verwendet standardmäßig HTTPS. HTTPS basiert auf Zertifikaten für Vertrauen, Identität und Verschlüsselung.

In diesem Dokument wird erläutert, wie Sie mithilfe der .NET-Befehlszeilenschnittstelle (CLI)vorgefertigte Containerimages mit HTTPS ausführen. Anweisungen zum Ausführen von Docker in der Entwicklung mit Visual Studio finden Sie unter Developing ASP.NET Core Applications with Docker over HTTPS (Entwickeln von ASP.NET Core-Anwendungen mit Docker über HTTPS).

Für dieses Beispiel benötigen Sie den Docker-Client Docker 17.06 oder höher.

Voraussetzungen

Das .NET Core 2.2 SDK oder höher ist für einige der Anweisungen in diesem Dokument erforderlich.

Zertifikate

Ein Zertifikat von einer Zertifizierungsstelle ist für das Produktionshosting für eine Domäne erforderlich. Let's Encrypt ist eine Zertifizierungsstelle, die kostenlose Zertifikate anbietet.

In diesem Dokument werden selbstsignierte Entwicklungszertifikate zum Hosten von vorgefertigten Images über localhost verwendet. Die Anweisungen ähneln der Verwendung von Produktionszertifikaten. Das von generierte Zertifikat dotnet dev-certs ist nur für die Verwendung mit vorgesehen und sollte localhost nicht in einer Umgebung wie Kubernetes verwendet werden. Um HTTPS in einem Kubernetes-Cluster zu unterstützen, verwenden Sie die Von Verwalten von TLS-Zertifikaten in einem Cluster bereitgestellten Tools, um TLS in Pods einzurichten.

Verwenden Sie dotnet dev-certs, um selbstsignierte Zertifikate für Entwicklung und Tests zu erstellen.

Für Produktionszertifikate:

  • Das dotnet dev-certs Tool ist nicht erforderlich.
  • Zertifikate müssen nicht an dem Speicherort gespeichert werden, der in den Anweisungen verwendet wird. Jeder Speicherort sollte funktionieren, obwohl das Speichern von Zertifikaten in Ihrem Standortverzeichnis nicht empfohlen wird.

Die Anweisungen im folgenden Abschnitt enthalten die Bereitstellung von Zertifikaten in Containern mithilfe der -v Befehlszeilenoption von Docker. Sie können Mit einem COPY Befehl in einer Dockerfile-Datei Zertifikate zu Containerimages hinzufügen, dies wird jedoch nicht empfohlen. Das Kopieren von Zertifikaten in ein Image wird aus folgenden Gründen nicht empfohlen:

  • Es ist schwierig, das gleiche Image zum Testen mit Entwicklerzertifikaten zu verwenden.
  • Es ist schwierig, das gleiche Image für das Hosting mit Produktionszertifikaten zu verwenden.
  • Es besteht ein erhebliches Risiko der Offenlegung von Zertifikaten.

Ausführen vorgefertigter Containerimages mit HTTPS

Befolgen Sie die folgenden Anweisungen für ihre Betriebssystemkonfiguration.

Windows mit Linux-Containern

Generieren Sie ein Zertifikat, und konfigurieren Sie den lokalen Computer:

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

Ersetzen Sie in den vorherigen Befehlen { password here } durch ein Kennwort.

Führen Sie das Containerimage mit ASP.NET Core, die für HTTPS konfiguriert sind, in einer Befehlsshell aus:

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

Ersetzen Sie bei Verwendung von PowerShell %USERPROFILE% durch $env:USERPROFILE .

Das Kennwort muss mit dem für das Zertifikat verwendeten Kennwort übereinstimmen.

Hinweis: Das Zertifikat muss in diesem Fall eine .pfx Datei sein. Die Verwendung einer .crt - oder .key -Datei mit oder ohne Kennwort wird für den Beispielcontainer nicht unterstützt. Wenn Sie z. B. eine .crt Datei angeben, gibt der Container möglicherweise Fehlermeldungen wie "Ssl im Servermodus muss ein Zertifikat mit dem zugeordneten privaten Schlüssel verwenden. " zurück. Überprüfen Sie bei Verwendung von WSLden Bereitstellungspfad, um sicherzustellen, dass das Zertifikat ordnungsgemäß geladen wird.

macOS oder Linux

Generieren Sie ein Zertifikat, und konfigurieren Sie den lokalen Computer:

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

dotnet dev-certs https --trustwird nur unter macOS und Windows unterstützt. Sie müssen Zertifikaten unter Linux auf die weise vertrauen, die von Ihrer Distribution unterstützt wird. Es ist wahrscheinlich, dass Sie dem Zertifikat in Ihrem Browser vertrauen müssen.

Ersetzen Sie in den vorherigen Befehlen { password here } durch ein Kennwort.

Führen Sie das Containerimage mit einer für HTTPS konfigurierten ASP.NET Core-Instanz aus:

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 mit dem für das Zertifikat verwendeten Kennwort übereinstimmen.

Windows mit Windows-Containern

Generieren Sie ein Zertifikat, und konfigurieren Sie den lokalen Computer:

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

Ersetzen Sie in den vorherigen Befehlen { password here } durch ein Kennwort. Ersetzen Sie bei Verwendung von PowerShell %USERPROFILE% durch $env:USERPROFILE .

Führen Sie das Containerimage mit einer für HTTPS konfigurierten ASP.NET Core-Instanz aus:

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 mit dem für das Zertifikat verwendeten Kennwort übereinstimmen. Ersetzen Sie bei Verwendung von PowerShell %USERPROFILE% durch $env:USERPROFILE .

Entwickeln von ASP.NET Core-Anwendungen mit Docker über HTTPS

Informationen und Beispiele zum Entwickeln ASP.NET Core Anwendungen mit HTTPS in Docker-Containern finden Sie unter Developing ASP.NET Core Applications with Docker over HTTPS (Entwickeln von ASP.NET Core-Anwendungen mit Docker über HTTPS).