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 vordefinierte Containerimages mit HTTPS mithilfe der Befehlszeilenschnittstelle (CLI) von .NET ausgeführt werden. Anweisungen zum Ausführen von Docker in der Entwicklung mit Visual Studio finden Sie unter Entwickeln von ASP.NET Core Anwendungen mit Docker über HTTPS.

Für dieses Beispiel benötigen Sie den Docker-ClientDocker 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

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

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

Wird verwendet 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 Websiteverzeichnis nicht empfohlen wird.

Die anweisungen im folgenden Abschnitt volume mount certificates into containers using Docker's -v command-line option. Sie könnten Zertifikate in Containerimages mit einem COPY Befehl in einer Dockerfile hinzufügen, es wird jedoch nicht empfohlen. Das Kopieren von Zertifikaten in ein Bild wird aus folgenden Gründen nicht empfohlen:

  • Es ist schwierig, dasselbe Bild für Tests mit Entwicklerzertifikaten zu verwenden.
  • Es macht schwierig, dasselbe Bild für das Hosting mit Produktionszertifikaten zu verwenden.
  • Es besteht erhebliches Risiko der Offenlegung von Zertifikaten.

Ausführen vordefinierter Containerimages mit HTTPS

Verwenden Sie die folgenden Anweisungen für ihre Betriebssystemkonfiguration.

Windows mit Linux-Containern

Generieren Sie Zertifikat und konfigurieren Sie den lokalen Computer:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <password>
dotnet dev-certs https --trust

Ersetzen Sie <password> in den vorherigen Befehlen durch ein Kennwort.

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

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 %USERPROFILE% bei Verwendung von PowerShell durch $env:USERPROFILE.

Das Kennwort muss mit dem kennwort übereinstimmen, das für das Zertifikat verwendet wird.

Hinweis: Das Zertifikat in diesem Fall muss eine .pfx Datei sein. Die Verwendung einer .crt Datei .key mit oder ohne Kennwort wird mit dem Beispielcontainer nicht unterstützt. Wenn Sie beispielsweise eine .crt Datei angeben, gibt der Container möglicherweise Fehlermeldungen wie "Der Servermodus SSL muss ein Zertifikat mit dem zugeordneten privaten Schlüssel verwenden". Überprüfen Sie beim Verwenden von WSL den Bereitstellungspfad, um sicherzustellen, dass das Zertifikat ordnungsgemäß geladen wird.

macOS oder Linux

Generieren Sie 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 --trust wird nur unter macOS und Windows unterstützt. Sie müssen Zertifikaten auf Linux auf die Weise vertrauen, die von Ihrer Verteilung unterstützt wird. Es ist wahrscheinlich, dass Sie dem Zertifikat in Ihrem Browser vertrauen müssen.

Ersetzen Sie { password here } in den vorherigen Befehlen 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 kennwort übereinstimmen, das für das Zertifikat verwendet wird.

Windows mit Windows-Containern

Generieren Sie 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 { password here } in den vorherigen Befehlen durch ein Kennwort. Ersetzen Sie %USERPROFILE% bei Verwendung von PowerShell 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 kennwort übereinstimmen, das für das Zertifikat verwendet wird. Ersetzen Sie %USERPROFILE% bei Verwendung von PowerShell durch $env:USERPROFILE.

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

Weitere Informationen und Beispiele zum Entwickeln von ASP.NET Core Anwendungen mit HTTPS in Docker-Containern finden Sie unter "Entwickeln von ASP.NET Core Anwendungen mit Docker-Containern" mit Docker-Containern.

Weitere Informationen