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 zaufania, tożsamości i 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.

Zobacz też