Udostępnij przez


Używanie protokołu SSL dla konteneryzowanych aplikacji ASP.NET Core

Protokół SSL (Secure Sockets Layer) zapewnia bezpieczne połączenia za pośrednictwem protokołu HTTP (HTTPS). Ta metoda zabezpieczania połączeń używa certyfikatu, a w aplikacji konteneryzowanej mapowania portów różnią się w przypadku zabezpieczonych i niezabezpieczonych punktów wejścia.

Wymagania wstępne

Wymagania wstępne

  • Docker Desktop.
  • Program Visual Studio, który ma zainstalowane pakiety do tworzenia ASP.NET i aplikacji internetowych, rozwoju aplikacji na platformie Azure, i/lub rozwoju aplikacji desktopowych .NET.

Zabezpieczenia aplikacji wielokontenerowych

Architektury aplikacji wielokontenerowych różnią się w zależności od wymagań dotyczących zabezpieczeń. Niektóre projekty aplikacji używają protokołu HTTPS dla zewnętrznych punktów końcowych, ale protokół HTTP do komunikacji wewnętrznej z jednego kontenera do innego. Środowiska o wysokim poziomie zabezpieczeń mogą używać protokołu HTTPS dla całej komunikacji, nawet między kontenerami dostępnymi tylko w bezpiecznym obwodzie zewnętrznym.

Porty i mapowania portów

Plik Dockerfile zawiera dyrektywy dotyczące uwidaczniania portów do ruchu zewnętrznego za pośrednictwem niezabezpieczonego protokołu HTTP lub bezpiecznego protokołu HTTPS. Ponadto platforma .NET 8 lub nowsza uruchamia konteneryzowaną aplikację jako typowy użytkownik, ale we wcześniejszych wersjach platformy .NET aplikacje konteneryzowane działają jako administrator. W przypadku uruchamiania jako administrator aplikacje mają dostęp do uprzywilejowanych portów 80 dla ruchu HTTP i ruchu HTTPS 443. Gdy aplikacje działają jako użytkownicy bez podniesionych uprawnień, używają portów 8080 dla protokołu HTTP i 8081 dla protokołu HTTPS. Porty są wyświetlane w poleceniach EXPOSE w pliku Dockerfile generowanym przez program Visual Studio. Porty w kontenerze określonym w pliku Dockerfile są mapowane na porty hosta przy użyciu mapowań określonych w pliku ustawień uruchamiania. Zobacz ustawienia uruchamiania narzędzi kontenerów. Po uruchomieniu kontenera można wyświetlić odwzorowania portów w oknie Containers. Sprawdź i zdiagnozuj kontenery.

Certyfikaty

Narzędzia do kontenerów w programie Visual Studio obsługują debugowanie aplikacji ASP.NET Core z włączoną obsługą SSL i certyfikatem deweloperskim, tak samo jak można się spodziewać, że będzie działać bez użycia kontenerów. Aby to zrobić, program Visual Studio dodaje kilka dodatkowych kroków w celu wyeksportowania certyfikatu i udostępnienia go kontenerowi. Oto przepływ obsługiwany przez program Visual Studio podczas debugowania w kontenerze:

  1. Gwarantuje, że lokalny certyfikat programowania jest obecny i zaufany na maszynie hosta za pomocą narzędzia dev-certs.

  2. Eksportuje certyfikat do %APPDATA%\ASP.NET\Https z dobrze zabezpieczonym hasłem przechowywanym w magazynie tajemnic użytkownika dla tej konkretnej aplikacji.

  3. Montuje woluminy dla następujących katalogów:

    • *%APPDATA%\Microsoft\UserSecrets
    • *%APPDATA%\ASP.NET\Https

ASP.NET Core szuka certyfikatu, który pasuje do nazwy zestawu w folderze Https, dlatego jest przypisany do kontenera na tej ścieżce. Ścieżkę certyfikatu i hasło można również zdefiniować przy użyciu zmiennych środowiskowych (czyli ASPNETCORE_Kestrel__Certificates__Default__Path i ASPNETCORE_Kestrel__Certificates__Default__Password) lub w pliku tajemnic użytkownika json, na przykład:

{
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "c:\\app\\mycert.pfx",
        "Password": "strongpassword"
      }
    }
  }
}

Jeśli konfiguracja obsługuje zarówno konteneryzowane, jak i niekontenerowane kompilacje, należy użyć zmiennych środowiskowych, ponieważ ścieżki są specyficzne dla środowiska kontenera.

Aby uzyskać więcej informacji na temat używania protokołu SSL z aplikacjami ASP.NET Core w kontenerach, zobacz Hosting ASP.NET Core images with Docker over HTTPS.

Aby zapoznać się z przykładem kodu, który demonstruje tworzenie certyfikatów niestandardowych dla aplikacji wielousługowej, która jest zaufana na hoście i w kontenerach dla komunikacji między usługami HTTPS, zobacz CertExample.

Jeśli planujesz wdrożyć konteneryzowaną aplikację na platformie Azure, zobacz Konfigurowanie protokołu HTTPS podczas wdrażania konteneryzowanych aplikacji na platformie Azure.