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.
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 kontenera. Gdy kontener jest uruchomiony, możesz wyświetlić mapowania portów w oknie Kontenery . Zobacz Wyświetlanie i diagnozowanie kontenerów.
Certyfikaty
Narzędzia kontenera w programie Visual Studio obsługują debugowanie aplikacji podstawowej z obsługą protokołu SSL ASP.NET z certyfikatem deweloperskim, tak samo jak w przypadku oczekiwania, że będzie działać bez 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:
Zapewnia obecność lokalnego certyfikatu programistycznego i zaufanego na maszynie hosta za pomocą
dev-certs
narzędzia.Eksportuje certyfikat z
%APPDATA%\ASP.NET\Https
bezpiecznym hasłem przechowywanym w magazynie wpisów tajnych użytkownika dla tej konkretnej aplikacji.Wolumin instaluje następujące katalogi:
*%APPDATA%\Microsoft\UserSecrets
*%APPDATA%\ASP.NET\Https
ASP.NET Core szuka certyfikatu zgodnego z nazwą zestawu w folderze Https , dlatego jest mapowany na kontener w tej ścieżce. Alternatywnie można zdefiniować ścieżkę certyfikatu i hasło przy użyciu zmiennych środowiskowych (czyli ASPNETCORE_Kestrel__Certificates__Default__Path
ASPNETCORE_Kestrel__Certificates__Default__Password
) lub w pliku json wpisów tajnych użytkownika, 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 (Hostowanie obrazów ASP.NET Core za pomocą platformy Docker za pośrednictwem protokołu HTTPS).
Przykładowy kod przedstawiający 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.