Hostowanie obrazów ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS
Autor: Rick Anderson
ASP.NET Core domyślnie używa protokołu HTTPS. Protokół HTTPS opiera się na certyfikatach na potrzeby zaufania, identityi szyfrowania.
W tym dokumencie wyjaśniono, jak uruchamiać wstępnie skompilowane obrazy kontenerów przy użyciu protokołu HTTPS przy użyciu interfejsu wiersza polecenia platformy .NET. Aby uzyskać instrukcje dotyczące uruchamiania platformy Docker w programach programistycznych za pomocą programu Visual Studio, zobacz Tworzenie aplikacji ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS.
Ten przykład wymaga platformy Docker 17.06 lub nowszej klienta platformy Docker.
Wymagania wstępne
Bieżący zestaw .NET SDK.
Certyfikaty
Certyfikat z urzędu certyfikacji jest wymagany do hostowania produkcyjnego dla domeny. Let's Encrypt jest urzędem certyfikacji, który oferuje bezpłatne certyfikaty.
W tym dokumencie używane są certyfikaty programistyczne z podpisem własnym do hostowania wstępnie utworzonych obrazów za pośrednictwem programu localhost
. Instrukcje są podobne do używania certyfikatów produkcyjnych. Certyfikat wygenerowany przez dotnet dev-certs
program jest używany tylko z usługą localhost
i nie powinien być używany w środowisku, na przykład Kubernetes. Aby obsługiwać protokół HTTPS w klastrze Kubernetes, użyj narzędzi udostępnianych przez zarządzanie certyfikatami TLS w klastrze , aby skonfigurować protokół TLS w zasobnikach.
Użyj dotnet dev-certs
polecenia , aby utworzyć certyfikaty z podpisem własnym na potrzeby programowania i testowania.
W przypadku certyfikatów produkcyjnych:
- Narzędzie
dotnet dev-certs
nie jest wymagane. - Certyfikaty nie muszą być przechowywane w lokalizacji używanej w instrukcjach. Każda lokalizacja powinna działać, chociaż przechowywanie certyfikatów w katalogu lokacji nie jest zalecane.
Instrukcje zawarte w poniższej sekcji volume mount certificates into containers using Docker's command-line option (Instalowanie certyfikatów w kontenerach przy użyciu opcji wiersza polecenia platformy -v
Docker). Certyfikaty można dodać do obrazów kontenerów za pomocą COPY
polecenia w pliku Dockerfile, ale nie jest to zalecane. Kopiowanie certyfikatów do obrazu nie jest zalecane z następujących powodów:
- Do testowania przy użyciu certyfikatów deweloperów trudno jest użyć tego samego obrazu.
- Trudno jest użyć tego samego obrazu do hostowania z certyfikatami produkcyjnymi.
- Istnieje znaczne ryzyko ujawnienia certyfikatu.
Uruchamianie wstępnie utworzonych obrazów kontenerów przy użyciu protokołu HTTPS
Skorzystaj z poniższych instrukcji dotyczących konfiguracji systemu operacyjnego.
System Windows korzystający z kontenerów systemu Linux
Wygeneruj certyfikat i skonfiguruj komputer lokalny:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
W poprzednich poleceniach zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem.
Uruchom obraz kontenera przy użyciu ASP.NET Core skonfigurowanego dla protokołu HTTPS w powłoce poleceń:
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
W poprzednim kodzie zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem. Hasło musi być zgodne z hasłem używanym dla certyfikatu.
W przypadku korzystania z programu PowerShell zastąp ciąg %USERPROFILE%
.$env:USERPROFILE
Uwaga: certyfikat w tym przypadku musi być plikiem .pfx
. Użycie .crt
pliku lub .key
z hasłem lub bez hasła nie jest obsługiwane w przykładowym kontenerze. Na przykład podczas określania .crt
pliku kontener może zwracać komunikaty o błędach, takie jak "Protokół SSL trybu serwera musi używać certyfikatu ze skojarzonym kluczem prywatnym". W przypadku korzystania z programu WSL zweryfikuj ścieżkę instalacji, aby upewnić się, że certyfikat jest ładowany poprawnie.
macOS lub Linux
Generowanie certyfikatu i konfigurowanie komputera lokalnego:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
W systemie Linux dotnet dev-certs https --trust
wymagany jest zestaw .NET 9 SDK lub nowszy. W przypadku systemu Linux na platformie .NET 8.0.401 SDK i starszych wersjach zobacz dokumentację dystrybucji systemu Linux, aby ufać certyfikatowi.
W poprzednich poleceniach zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem.
Uruchom obraz kontenera przy użyciu ASP.NET Core skonfigurowanego dla protokołu 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
W poprzednim kodzie zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem. Hasło musi być zgodne z hasłem używanym dla certyfikatu.
System Windows z użyciem kontenerów systemu Windows
Generowanie certyfikatu i konfigurowanie komputera lokalnego:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
W poprzednich poleceniach zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem. W przypadku korzystania z programu PowerShell zastąp ciąg %USERPROFILE%
.$env:USERPROFILE
Uruchom obraz kontenera przy użyciu ASP.NET Core skonfigurowanego dla protokołu 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
UWAGA: <CREDENTIAL_PLACEHOLDER>
jest symbolem zastępczym domyślnego Kestrel hasła certyfikatów.
Hasło musi być zgodne z hasłem używanym dla certyfikatu. W przypadku korzystania z programu PowerShell zastąp ciąg %USERPROFILE%
.$env:USERPROFILE
Tworzenie aplikacji ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS
Aby uzyskać informacje i przykłady dotyczące tworzenia aplikacji ASP.NET ASP.NET Core za pomocą platformy Docker za pomocą protokołu Docker za pomocą protokołu Docker, zobacz artykuł Tworzenie aplikacji ASP.NET Core przy użyciu protokołu HTTPS w kontenerach platformy Docker.
Zobacz też
ASP.NET Core domyślnie używa protokołu HTTPS. Protokół HTTPS opiera się na certyfikatach na potrzeby zaufania, identityi szyfrowania.
W tym dokumencie wyjaśniono, jak uruchamiać wstępnie skompilowane obrazy kontenerów przy użyciu protokołu HTTPS przy użyciu interfejsu wiersza polecenia platformy .NET. Aby uzyskać instrukcje dotyczące uruchamiania platformy Docker w programach programistycznych za pomocą programu Visual Studio, zobacz Tworzenie aplikacji ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS.
Ten przykład wymaga platformy Docker 17.06 lub nowszej klienta platformy Docker.
Wymagania wstępne
Bieżący zestaw .NET SDK.
Certyfikaty
Certyfikat z urzędu certyfikacji jest wymagany do hostowania produkcyjnego dla domeny. Let's Encrypt jest urzędem certyfikacji, który oferuje bezpłatne certyfikaty.
W tym dokumencie używane są certyfikaty programistyczne z podpisem własnym do hostowania wstępnie utworzonych obrazów za pośrednictwem programu localhost
. Instrukcje są podobne do używania certyfikatów produkcyjnych. Certyfikat wygenerowany przez dotnet dev-certs
program jest używany tylko z usługą localhost
i nie powinien być używany w środowisku, na przykład Kubernetes. Aby obsługiwać protokół HTTPS w klastrze Kubernetes, użyj narzędzi udostępnianych przez zarządzanie certyfikatami TLS w klastrze , aby skonfigurować protokół TLS w zasobnikach.
Użyj dotnet dev-certs
polecenia , aby utworzyć certyfikaty z podpisem własnym na potrzeby programowania i testowania.
W przypadku certyfikatów produkcyjnych:
- Narzędzie
dotnet dev-certs
nie jest wymagane. - Certyfikaty nie muszą być przechowywane w lokalizacji używanej w instrukcjach. Każda lokalizacja powinna działać, chociaż przechowywanie certyfikatów w katalogu lokacji nie jest zalecane.
Instrukcje zawarte w poniższej sekcji volume mount certificates into containers using Docker's command-line option (Instalowanie certyfikatów w kontenerach przy użyciu opcji wiersza polecenia platformy -v
Docker). Certyfikaty można dodać do obrazów kontenerów za pomocą COPY
polecenia w pliku Dockerfile, ale nie jest to zalecane. Kopiowanie certyfikatów do obrazu nie jest zalecane z następujących powodów:
- Do testowania przy użyciu certyfikatów deweloperów trudno jest użyć tego samego obrazu.
- Trudno jest użyć tego samego obrazu do hostowania z certyfikatami produkcyjnymi.
- Istnieje znaczne ryzyko ujawnienia certyfikatu.
Uruchamianie wstępnie utworzonych obrazów kontenerów przy użyciu protokołu HTTPS
Skorzystaj z poniższych instrukcji dotyczących konfiguracji systemu operacyjnego.
System Windows korzystający z kontenerów systemu Linux
Wygeneruj certyfikat i skonfiguruj komputer lokalny:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
W poprzednich poleceniach zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem.
Uruchom obraz kontenera przy użyciu ASP.NET Core skonfigurowanego dla protokołu HTTPS w powłoce poleceń:
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
W poprzednim kodzie zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem. Hasło musi być zgodne z hasłem używanym dla certyfikatu.
W przypadku korzystania z programu PowerShell zastąp ciąg %USERPROFILE%
.$env:USERPROFILE
Uwaga: certyfikat w tym przypadku musi być plikiem .pfx
. Użycie .crt
pliku lub .key
z hasłem lub bez hasła nie jest obsługiwane w przykładowym kontenerze. Na przykład podczas określania .crt
pliku kontener może zwracać komunikaty o błędach, takie jak "Protokół SSL trybu serwera musi używać certyfikatu ze skojarzonym kluczem prywatnym". W przypadku korzystania z programu WSL zweryfikuj ścieżkę instalacji, aby upewnić się, że certyfikat jest ładowany poprawnie.
macOS lub Linux
Generowanie certyfikatu i konfigurowanie komputera lokalnego:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
dotnet dev-certs https --trust
program jest obsługiwany tylko w systemach macOS i Windows. Należy ufać certyfikatom w systemie Linux w sposób obsługiwany przez dystrybucję. Prawdopodobnie musisz ufać certyfikatowi w przeglądarce.
W poprzednich poleceniach zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem.
Uruchom obraz kontenera przy użyciu ASP.NET Core skonfigurowanego dla protokołu 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
W poprzednim kodzie zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem. Hasło musi być zgodne z hasłem używanym dla certyfikatu.
System Windows z użyciem kontenerów systemu Windows
Generowanie certyfikatu i konfigurowanie komputera lokalnego:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
W poprzednich poleceniach zastąp <CREDENTIAL_PLACEHOLDER>
ciąg hasłem. W przypadku korzystania z programu PowerShell zastąp ciąg %USERPROFILE%
.$env:USERPROFILE
Uruchom obraz kontenera przy użyciu ASP.NET Core skonfigurowanego dla protokołu 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
UWAGA: <CREDENTIAL_PLACEHOLDER>
jest symbolem zastępczym domyślnego Kestrel hasła certyfikatów.
Hasło musi być zgodne z hasłem używanym dla certyfikatu. W przypadku korzystania z programu PowerShell zastąp ciąg %USERPROFILE%
.$env:USERPROFILE
Tworzenie aplikacji ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS
Aby uzyskać informacje i przykłady dotyczące tworzenia aplikacji ASP.NET ASP.NET Core za pomocą platformy Docker za pomocą protokołu Docker za pomocą protokołu Docker, zobacz artykuł Tworzenie aplikacji ASP.NET Core przy użyciu protokołu HTTPS w kontenerach platformy Docker.