Hostowanie obrazów ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS

Rick Anderson

ASP.NET Core domyślnie używa protokołu HTTPS. HTTPS opiera się na certyfikatach na potrzeby zaufania, tożsamości i szyfrowania.

W tym dokumencie wyjaśniono, jak uruchamiać gotowe obrazy kontenerów przy użyciu protokołu HTTPS za pomocą interfejsu wiersza polecenia (CLI) platformy .NET. Aby uzyskać instrukcje dotyczące uruchamiania platformy Docker w środowisku programistycznym 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 klienta Docker w wersji 17.06 lub nowszej.

Wymagania wstępne

Bieżący pakiet SDK platformy .NET.

Certyfikaty

Certyfikat z urzędu certyfikacji jest wymagany do hostingu 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 instrukcji dotyczących użycia certyfikatów produkcyjnych. Certyfikat wygenerowany przez program dotnet dev-certs jest przeznaczony do użytku wyłącznie z usługą localhost i nie powinien być używany w środowisku, na przykład Kubernetes. Aby obsługiwać protokół HTTPS w klastrze Kubernetes, skorzystaj ze wskazówek zawartych w dokumencie Zarządzanie certyfikatami TLS w klastrze, aby skonfigurować TLS w zasobnikach.

Użyj dotnet dev-certs polecenia, aby utworzyć certyfikaty z podpisem własnym na potrzeby tworzenia i testowania.

Dla 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 witryny nie jest zalecane.

Instrukcje zawarte w poniższej sekcji opisują montowanie certyfikatów do kontenerów przy użyciu opcji wiersza polecenia platformy Docker -v. 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.

Windows korzystający z kontenerów 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> 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=443 -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> hasłem. Hasło musi być zgodne z hasłem używanym dla certyfikatu.

W przypadku korzystania z programu PowerShell zastąp %USERPROFILE% elementem $env:USERPROFILE.

Certyfikat w tym przypadku musi być plikiem .pfx file. Użycie pliku .crt lub .key, z hasłem lub bez niego, nie jest obsługiwane w przykładowym kontenerze. Na przykład podczas określania pliku .crt kontener może zwracać komunikaty o błędach, takie jak „SSL w trybie serwera wymaga certyfikatu ze skojarzonym kluczem prywatnym”. W przypadku korzystania z programu WSL zweryfikuj ścieżkę montowania, aby upewnić się, że certyfikat jest ładowany poprawnie.

Note

Nie należy mylić klucza konfiguracji HTTPS_PORTS i zmiennej środowiskowej ASPNETCORE_HTTPS_PORTS, które ustawiają porty dla konfiguracji punktów końcowych Kestrel/HTTP.sys, z kluczem konfiguracji HTTPS_PORT i zmienną środowiskową ASPNETCORE_HTTPS_PORT, które ustawiają port dla middleware przekierowania HTTPS.

macOS lub Linux

Wygeneruj certyfikat i skonfiguruj komputer lokalny:

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 SDK platformy .NET 9 lub nowszej. W przypadku systemu Linux na platformie .NET 8.0.401 lub starszej wersji zestawu SDK zobacz dokumentację dystrybucji systemu Linux, aby ufać certyfikatowi.

W poprzednich poleceniach zastąp <CREDENTIAL_PLACEHOLDER> 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=443 -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 powyższym kodzie zastąp <CREDENTIAL_PLACEHOLDER> hasłem. Hasło musi być zgodne z hasłem używanym dla certyfikatu.

Note

Nie należy mylić klucza konfiguracji HTTPS_PORTS i zmiennej środowiskowej ASPNETCORE_HTTPS_PORTS, które ustawiają porty dla konfiguracji punktów końcowych Kestrel/HTTP.sys, z kluczem konfiguracji HTTPS_PORT i zmienną środowiskową ASPNETCORE_HTTPS_PORT, które ustawiają port dla middleware przekierowania HTTPS.

System Windows korzystający z kontenerów Windows

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> hasłem. W przypadku korzystania z programu PowerShell zastąp %USERPROFILE% elementem $env:USERPROFILE.

Uruchom obraz kontenera z ASP.NET Core skonfigurowanym do obsługi 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=443 -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> oznacza domyślne hasło certyfikatów Kestrel.

Hasło musi być takie samo jak hasło używane dla certyfikatu. W przypadku korzystania z programu PowerShell zastąp %USERPROFILE% elementem $env:USERPROFILE.

Tworzenie aplikacji ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS

Informacje i przykłady dotyczące tworzenia aplikacji ASP.NET Core z użyciem protokołu HTTPS w kontenerach platformy Docker można znaleźć w artykule Tworzenie aplikacji ASP.NET Core z platformą Docker przez HTTPS.

Zobacz też

ASP.NET Core domyślnie używa HTTPS. HTTPS opiera się na certyfikatach na potrzeby zaufania, tożsamości i szyfrowania.

W tym dokumencie wyjaśniono, jak uruchamiać wstępnie utworzone obrazy kontenerów przy użyciu protokołu HTTPS przy użyciu interfejsu wiersza polecenia platformy .NET (CLI). Aby uzyskać instrukcje dotyczące uruchamiania Dockera w środowisku deweloperskim w programie Visual Studio, zobacz Tworzenie aplikacji ASP.NET Core za pomocą Dockera za pośrednictwem protokołu HTTPS.

Ten przykład wymaga klienta Docker w wersji Docker 17.06 lub nowszej.

Wymagania wstępne

Aktualny pakiet SDK platformy .NET.

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 deweloperskie z podpisem własnym do hostowania wstępnie zbudowanych obrazów za pośrednictwem localhost. Instrukcje są podobne do tych dotyczących używania certyfikatów produkcyjnych. Certyfikat wygenerowany przez dotnet dev-certs jest przeznaczony do użytku wyłącznie z localhost i nie powinien być używany w środowisku takim jak Kubernetes. Aby obsługiwać protokół HTTPS w klastrze Kubernetes, użyj narzędzi udostępnianych przez Manage TLS Certificates in a Cluster, aby skonfigurować protokół TLS w zasobnikach.

Użyj polecenia dotnet dev-certs, aby utworzyć certyfikaty z podpisem własnym do celów programistycznych 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 witryny nie jest zalecane.

Instrukcje zawarte w poniższej sekcji opisują instalowanie certyfikatów w kontenerach przy użyciu opcji wiersza polecenia platformy Docker -v. 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.

Windows używający 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> 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://+:443;http://+" -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 powyższym kodzie zastąp <CREDENTIAL_PLACEHOLDER> hasłem. Hasło musi być zgodne z hasłem używanym dla certyfikatu.

W przypadku korzystania z programu PowerShell zastąp %USERPROFILE% elementem $env:USERPROFILE.

Uwaga: certyfikat w tym przypadku musi być plikiem .pfx . Użycie pliku .crt lub .key, z hasłem lub bez hasła, nie jest obsługiwane w przykładowym kontenerze. Na przykład podczas określania pliku .crt kontener może zwracać komunikaty o błędach, takie jak „Tryb serwera SSL musi używać certyfikatu ze skojarzonym kluczem prywatnym”. W przypadku korzystania z programu WSL zweryfikuj ścieżkę montowania, aby upewnić się, że certyfikat jest ładowany poprawnie.

macOS lub Linux

Wygeneruj certyfikat i skonfiguruj komputer lokalny:

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

dotnet dev-certs https --trust 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> 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://+:443;http://+" -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 powyższym fragmencie kodu zastąp <CREDENTIAL_PLACEHOLDER> hasłem. Hasło musi być zgodne z hasłem używanym dla certyfikatu.

System Windows z użyciem kontenerów systemu Windows

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> hasłem. W przypadku korzystania z programu PowerShell zastąp %USERPROFILE% elementem $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://+:443;http://+" -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 %USERPROFILE% elementem $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 Core z użyciem protokołu HTTPS w kontenerach Docker, zobacz artykuł Tworzenie aplikacji ASP.NET Core przy użyciu protokołu HTTPS w kontenerach platformy Docker.

Zobacz też