|
|
Opublikowano 15.08.2023 10:21:16
|
|
|
|

Wymagania: Podczas procesu tworzenia często można napotkać scenariusze szyfrowania i deszyfrowania, na przykład uwierzytelnianie poczty elektronicznej może zawierać zaszyfrowany ciąg znaków, a gdy użytkownik kliknie link, aby przejść do interfejsu, system może normalnie odszyfrować treść łańcucha, realizując tym samym funkcję uwierzytelniania poczty.
ASP.NET Core oferuje funkcje ochrony danych:Logowanie do linku jest widoczne.
Pakiet główny
Główne pakiety związane z ochroną danych to: następujące zestawy, które są w razie potrzeby cytowane:
- Standard Microsoft.AspNetCore.DataProtection.Abstractions. Nazwa pakietów pakietów na warstwie abstrakcji NET CORE. Obejmuje główne usługi interfejsu, takie jak IDataProtectionProvider i IDataProtector.
- Microsoft.AspNetCore.DataProtection, w tym podstawowe operacje kryptograficzne, zarządzanie kluczami, konfigurację i rozszerzalność.
- Rozszerzenie Microsoft.AspNetCore.DataProtection.Extensions. Zapewnia fabrycznej metody tworzenia instancji oraz metodę rozszerzenia pamięci dla kluczy. Ten pakiet jest używany w trybie nie-DI.
- Microsoft.AspNetCore.DataProtection.SystemWeb implementuje <machineKey>kompatybilność z mechanizmami szyfrowania i deszyfrowania w ASP.NET 4.x.
- Microsoft.AspNetCore.Cryptography.KeyDerivation oferuje implementację procedury haszowania haseł PBKDF2. Używaj go, gdy potrzebujesz szyfrowania za pomocą skrótu.
IDataProtectionProvider vs IDataProtector
IDataProtectionProvider opiera się na modelu Provider firmy Microsoft i służy do tworzenia polityk tworzenia instancji. Utwórz obiekt IDataProtector, wywołując metodę IDataProtectionProvider.CreateProtector(purpose). IDataProtector to usługa odpowiedzialna za szyfrowanie i deszyfrowanie, która oferuje głównie dwa typy metod: protect i unprotect (każdy typ ma wiele metod przeciążenia i rozszerzania). Proste rozumienie jest takie, że protect służy do szyfrowania, a unprotect do deszyfrowania. Parametr metody Create w IDataProtectionProvider to ciąg znaków zapewniający funkcjonalność izolacji. IDataProtectory utworzone z nieprzepuszczalnymi ciągami znaków będą miały różne wyniki szyfrowania, nawet jeśli szyfrują ten sam obiekt. Sam IDataProtector jest również niejawnym IDataProtectionProvider, który również oferuje metodę CreateProtector(purpose). Oznacza to, że można go łatwo wdrożyćTryb aplikacji wielodzierżawców。
Oto kilka rzeczy, o których warto pamiętać:
Instancje IDataProtectionProvider i IDataProtectorBezpieczeństwo gwintuCel. Metoda niechroniona polega na poinformowaniu dzwoniącego o niepowodzeniu odszyfrowania poprzez wyrzucenie wyjątku. Klasą wyjątków jest CryptographicException.
ASP.NET Core jest prosty w użyciu w ochronie danych
Dodano nowy interfejs do szyfrowania i odszyfrowywania danych, a kod wygląda następująco:
Test wygląda następująco:
IDataProtectionProvider to wzorzec singleton z następującym kodem:Logowanie do linku jest widoczne.
Zarządzanie kluczami
Jeśli profil użytkownika jest dostępny, klucz jest zachowywany na%LOCALAPPDATA%\ASP.NET\DataProtection-Keysfolder. Jeśli systemem operacyjnym jest Windows, klucz jest szyfrowany w spoczynku za pomocą DPAPI. Jak pokazano poniżej:
Kluczowe życie
Domyślnie kluczCykl życia trwa 90 dni。 Gdy klucz wygasa, aplikacja automatycznie generuje nowy klucz i ustawia nowy klucz jako klucz aktywny. Dopóki dezaktywowane klucze pozostają w systemie, aplikacja może odszyfrować dowolne dane chronione przez nie. Więcej informacji można znaleźć w artykule zarządzanie kluczami.Logowanie do linku jest widoczne.
Domyślny algorytm
Domyślne algorytmy ochrony obciążenia to AES-256-CBC (dla poufności) oraz HMACSHA256 (dla autentyczności). 512-bitowy klucz główny, który zmienia się co 90 dni, służy do wyprowadzenia dwóch podkluczy dla tych algorytmów na podstawie każdego ładunku.
ASP.NET dostawca pamięci kluczowej w Core
System plików: PersistKeysToFileSystem Azure Storage: PersistKeysToAzureBlobStorage, co wymaga referency: Azure.Extensions.AspNetCore.DataProtection.Blobs Redis storage: PersistKeysToStackExchangeRedis, wymagane odniesienie: Microsoft.AspNetCore.DataProtection.StackExchangeRedis
Odniesienie:Logowanie do linku jest widoczne.
Klastrowanie i rozproszone
Jeśli klucz serwera jest niespójny, na przykład: szyfrowanie serwera A i deszyfrowanie serwera B, zostanie wyrzucony wyjątek (jak pokazano na poniższym rysunku) i ten sam klucz musi zostać wdrożony.
Skonfiguruj ten sam klucz w następujący sposób:
Po uruchomieniu programu automatycznie generuje plik klucza *.xml w folderze publish_itsvse, utrzymuj ten plik spójny na różnych serwerach! Jak pokazano poniżej:
ASP.NET Konfiguracja ochrony rdzenia
ASP.NET CORE oferuje bogate wsparcie API, utrwalanie haseł, konfigurację i funkcje personalizacji.
- PersistKeysToAzureBlobStorage、ProtectKeysWithAzureKeyVault。 Azure cloud storage scenariusz.
- PersistKeysToFileSystem。 Lokalny schemat przechowywania danych w systemie plików, który rejestruje algorytmy szyfrowania, klucze i zależności.
- ProtectKeysWith*。 Szyfrowanie jest realizowane poprzez rozszerzenia tej metody nazewnictwa. Na przykład ProtectKeysWithCertificate
- SetDefaultKeyLifetime。 Domyślnie ustaw czas życia klucza na 90 dni.
- SetApplicationName。 Ustaw nazwę aplikacji. Domyślnie mechanizmy ochrony danych są całkowicie odizolowane od każdej aplikacji. Dzielenie kluczy między aplikacjami można uzyskać, ustawiając tę samą nazwę aplikacji.
- DisableAutomaticKeyGeneration。 Zapobiegaj automatycznemu cofnięciu klucza. Często nie chcemy, żeby hasła zmieniały się lub w usłudze klastrowej mamy dedykowaną usługę odpowiedzialną za cofanie aktualizacji kluczy, a inne payloady muszą pobierać je ze wspólnego miejsca.
- UżyjCryptographicAlgorithms。 Używaj niestandardowych algorytmów szyfrowania i deszyfrowania
Odniesienie:Logowanie do linku jest widoczne.
|
Poprzedni:Użyj PowerShell do wygenerowania elementu <machineKey>Następny:Porównaj Tailscale, ZeroTier, WireGuard, OmniEdge i Ngrok dla rozwiązań geo-sieciowych
|