Hosten von 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 vordefinierte Containerimages mit HTTPS über die .NET-Befehlszeilenschnittstelle (CLI) ausführen. 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 aktuelle .NET SDK.
Zertifikate
Ein Zertifikat einer Zertifizierungsstelle ist für das Produktionshosting für eine Domäne erforderlich. Let's Encrypt ist eine Zertifizierungsstelle, die kostenlose Zertifikate anbietet.
Dieses Dokument verwendet selbstsignierte Entwicklungszertifikate zum Hosten vordefinierter Images über localhost
. Die Anweisungen ähneln der Verwendung von Produktionszertifikaten. Das über dotnet dev-certs
generierte Zertifikat ist nur für die Verwendung mit localhost
bestimmt und sollte nicht in einer Umgebung wie Kubernetes eingesetzt werden. Um HTTPS in einem Kubernetes-Cluster zu unterstützen, verwenden Sie die über Verwalten von TLS-Zertifikaten in einem Cluster bereitgestellten Tools, um TLS innerhalb von 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 angegeben ist. Jeder Speicherort sollte funktionieren, allerdings wird davon abgeraten, die Zertifikate im Verzeichnis Ihrer Website zu speichern.
Die Anweisungen im folgenden Abschnitt beinhalten das Einbinden von Zertifikaten in Container unter Verwendung der Docker-Befehlszeilenoption -v
. Sie könnten Zertifikate mit einem COPY
-Befehl in einem Dockerfile in Containerimages einfügen, aber dies wird nicht empfohlen. Das Kopieren von Zertifikaten in ein Image wird aus den folgenden Gründen nicht empfohlen:
- Es erschwert die Verwendung desselben Images für Tests mit Entwicklerzertifikaten.
- Es erschwert die Verwendung desselben Images für das Hosting mit Produktionszertifikaten.
- Es besteht ein 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 ein Zertifikat, und konfigurieren Sie den lokalen Computer:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
in den vorherigen Befehlen durch ein Kennwort.
Führen Sie das Containerimage mit einer für HTTPS konfigurierten ASP.NET Core-Instanz in einer Befehlsshell aus:
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
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
im vorangehenden Code durch das Kennwort. Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird.
Ersetzen Sie bei Verwendung von PowerShell%USERPROFILE%
durch $env:USERPROFILE
.
Hinweis: Das Zertifikat muss in diesem Fall eine .pfx
-Datei sein. Die Verwendung einer .crt
- oder .key
-Datei mit oder ohne Kennwort wird vom Beispielcontainer nicht unterstützt. Wenn Sie zum Beispiel eine .crt
-Datei angeben, gibt der Container möglicherweise Fehlermeldungen wie diese zurück: „Der Servermodus SSL muss ein Zertifikat mit dem zugehörigen privaten Schlüssel verwenden.“ Überprüfen Sie bei Verwendung von WSL den Bereitstellungspfad, um sicherzustellen, dass das Zertifikat ordnungsgemäß geladen wird.
macOS oder Linux
Generieren eines Zertifikats und Konfigurieren des lokalen Computers:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Unter Linux erfordert dotnet dev-certs https --trust
.NET 9 SDK oder neuere Versionen. Für Linux unter .NET 8.0.401 SDK und älter finden Sie in der Dokumentation Ihrer Linux-Distribution Informationen dazu, wie Sie ein Zertifikat als vertrauenswürdig kennzeichnen.
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
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/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
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
im vorangehenden Code durch das Kennwort. Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird.
Windows mit Windows-Containern
Generieren eines Zertifikats und Konfigurieren des lokalen Computers:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
in den vorherigen Befehlen 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/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
HINWEIS: <CREDENTIAL_PLACEHOLDER>
ist ein Platzhalter für das Standardkennwort von Kestrel-Zertifikaten.
Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird. Ersetzen Sie bei Verwendung von PowerShell%USERPROFILE%
durch $env:USERPROFILE
.
Entwickeln von ASP.NET Core-Anwendungen mit Docker über HTTPS
Informationen und Beispiele zur Entwicklung von ASP.NET Core-Anwendungen mit HTTPS in Docker-Containern finden Sie unter Entwickeln von ASP.NET Core-Anwendungen mit Docker über HTTPS.
Siehe auch
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 vordefinierte Containerimages mit HTTPS über die .NET-Befehlszeilenschnittstelle (CLI) ausführen. 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 aktuelle .NET SDK.
Zertifikate
Ein Zertifikat einer Zertifizierungsstelle ist für das Produktionshosting für eine Domäne erforderlich. Let's Encrypt ist eine Zertifizierungsstelle, die kostenlose Zertifikate anbietet.
Dieses Dokument verwendet selbstsignierte Entwicklungszertifikate zum Hosten vordefinierter Images über localhost
. Die Anweisungen ähneln der Verwendung von Produktionszertifikaten. Das über dotnet dev-certs
generierte Zertifikat ist nur für die Verwendung mit localhost
bestimmt und sollte nicht in einer Umgebung wie Kubernetes eingesetzt werden. Um HTTPS in einem Kubernetes-Cluster zu unterstützen, verwenden Sie die über Verwalten von TLS-Zertifikaten in einem Cluster bereitgestellten Tools, um TLS innerhalb von 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 angegeben ist. Jeder Speicherort sollte funktionieren, allerdings wird davon abgeraten, die Zertifikate im Verzeichnis Ihrer Website zu speichern.
Die Anweisungen im folgenden Abschnitt beinhalten das Einbinden von Zertifikaten in Container unter Verwendung der Docker-Befehlszeilenoption -v
. Sie könnten Zertifikate mit einem COPY
-Befehl in einem Dockerfile in Containerimages einfügen, aber dies wird nicht empfohlen. Das Kopieren von Zertifikaten in ein Image wird aus den folgenden Gründen nicht empfohlen:
- Es erschwert die Verwendung desselben Images für Tests mit Entwicklerzertifikaten.
- Es erschwert die Verwendung desselben Images für das Hosting mit Produktionszertifikaten.
- Es besteht ein 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 ein Zertifikat, und konfigurieren Sie den lokalen Computer:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
in den vorherigen Befehlen durch ein Kennwort.
Führen Sie das Containerimage mit einer für HTTPS konfigurierten ASP.NET Core-Instanz in einer Befehlsshell aus:
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
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
im vorangehenden Code durch das Kennwort. Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird.
Ersetzen Sie bei Verwendung von PowerShell%USERPROFILE%
durch $env:USERPROFILE
.
Hinweis: Das Zertifikat muss in diesem Fall eine .pfx
-Datei sein. Die Verwendung einer .crt
- oder .key
-Datei mit oder ohne Kennwort wird vom Beispielcontainer nicht unterstützt. Wenn Sie zum Beispiel eine .crt
-Datei angeben, gibt der Container möglicherweise Fehlermeldungen wie diese zurück: „Der Servermodus SSL muss ein Zertifikat mit dem zugehörigen privaten Schlüssel verwenden.“ Überprüfen Sie bei Verwendung von WSL den Bereitstellungspfad, um sicherzustellen, dass das Zertifikat ordnungsgemäß geladen wird.
macOS oder Linux
Generieren eines Zertifikats und Konfigurieren des lokalen Computers:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
dotnet dev-certs https --trust
wird nur unter macOS und Windows unterstützt. Sie müssen Zertifikaten unter Linux in der Weise vertrauen, die von Ihrer Distribution unterstützt wird. Wahrscheinlich müssen Sie dem Zertifikat in Ihrem Browser vertrauen.
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
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/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
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
im vorangehenden Code durch das Kennwort. Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird.
Windows mit Windows-Containern
Generieren eines Zertifikats und Konfigurieren des lokalen Computers:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
Ersetzen Sie <CREDENTIAL_PLACEHOLDER>
in den vorherigen Befehlen 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/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
HINWEIS: <CREDENTIAL_PLACEHOLDER>
ist ein Platzhalter für das Standardkennwort von Kestrel-Zertifikaten.
Das Kennwort muss dem Kennwort entsprechen, das für das Zertifikat verwendet wird. Ersetzen Sie bei Verwendung von PowerShell%USERPROFILE%
durch $env:USERPROFILE
.
Entwickeln von ASP.NET Core-Anwendungen mit Docker über HTTPS
Informationen und Beispiele zur Entwicklung von ASP.NET Core-Anwendungen mit HTTPS in Docker-Containern finden Sie unter Entwickeln von ASP.NET Core-Anwendungen mit Docker über HTTPS.