Udostępnij za pośrednictwem


Rozwiązywanie problemów z usługą Ochrona hosta

W tym artykule opisano rozwiązania typowych problemów napotkanych podczas wdrażania lub obsługi serwera ochrona hosta (HGS) w chronionej sieci szkieletowej.

Dotyczy: Windows Server 2022, Windows Server 2019, Windows Server 2016

Jeśli nie masz pewności co do charakteru problemu, najpierw spróbuj uruchomić diagnostykę chronionej sieci szkieletowej na serwerach HGS i hostach funkcji Hyper-V, aby zawęzić potencjalne przyczyny.

Certyfikaty

Usługa HGS wymaga kilku certyfikatów w celu działania, w tym certyfikatu szyfrowania i podpisywania skonfigurowanego przez administratora, a także certyfikat zaświadczania zarządzanego przez samą usługę HGS. Jeśli te certyfikaty są niepoprawnie skonfigurowane, usługa HGS nie może obsługiwać żądań z hostów funkcji Hyper-V, które chcą zaświadczać lub odblokować funkcje ochrony kluczy dla chronionych maszyn wirtualnych. W poniższych sekcjach opisano typowe problemy związane z certyfikatami skonfigurowanymi w usłudze HGS.

Uprawnienia certyfikatu

Usługa HGS musi mieć dostęp zarówno do kluczy publicznych, jak i prywatnych certyfikatów szyfrowania i podpisywania dodanych do usługi HGS przez odcisk palca certyfikatu. W szczególności konto usługi zarządzane przez grupę (gMSA), które uruchamia usługę HGS, wymaga dostępu do kluczy. Aby znaleźć gMSA używane przez usługę HGS, uruchom następujące polecenie w wierszu polecenia programu PowerShell z podwyższonym poziomem uprawnień na serwerze HGS:

(Get-IISAppPool -Name KeyProtection).ProcessModel.UserName

Sposób udzielania dostępu do konta gMSA do korzystania z klucza prywatnego zależy od tego, gdzie jest przechowywany klucz: na komputerze jako pliku certyfikatu lokalnego, na sprzętowym module zabezpieczeń (HSM) lub przy użyciu niestandardowego dostawcy magazynu kluczy innej firmy.

Udzielanie dostępu do kluczy prywatnych opartych na oprogramowaniu

Jeśli używasz certyfikatu z podpisem własnym lub certyfikatu wystawionego przez urząd certyfikacji, który nie jest przechowywany w sprzętowym module zabezpieczeń lub niestandardowym dostawcy magazynu kluczy, możesz zmienić uprawnienia klucza prywatnego, wykonując następujące czynności:

  1. Otwórz menedżera certyfikatów lokalnych (certlm.msc).
  2. Rozwiń węzeł Certyfikaty osobiste>i znajdź certyfikat podpisywania lub szyfrowania, który chcesz zaktualizować.
  3. Kliknij prawym przyciskiem myszy certyfikat i wybierz pozycję Wszystkie zadania>Zarządzaj kluczami prywatnymi.
  4. Wybierz pozycję Dodaj , aby przyznać nowemu użytkownikowi dostęp do klucza prywatnego certyfikatu.
  5. W selektorze obiektów wprowadź nazwę konta gMSA dla znaleziono wcześniej usługi HGS, a następnie wybierz przycisk OK.
  6. Upewnij się, że gMSA ma dostęp do odczytu do certyfikatu.
  7. Wybierz przycisk OK , aby zamknąć okno uprawnień.

Jeśli używasz usługi HGS na serwerze Server Core lub zarządzasz serwerem zdalnie, nie będzie można zarządzać kluczami prywatnymi przy użyciu lokalnego menedżera certyfikatów. Zamiast tego należy pobrać moduł Programu PowerShell Narzędzia chronionej sieci szkieletowej, który umożliwi zarządzanie uprawnieniami w programie PowerShell.

  1. Otwórz konsolę programu PowerShell z podwyższonym poziomem uprawnień na maszynie Server Core lub użyj komunikacji zdalnej programu PowerShell z kontem z uprawnieniami administratora lokalnego w usłudze HGS.
  2. Uruchom następujące polecenia, aby zainstalować moduł Programu PowerShell narzędzi Guarded Fabric Tools i przyznać kontu gMSA dostęp do klucza prywatnego.
$certificateThumbprint = '<ENTER CERTIFICATE THUMBPRINT HERE>'

# Install the Guarded Fabric Tools module, if necessary
Install-Module -Name GuardedFabricTools -Repository PSGallery

# Import the module into the current session
Import-Module -Name GuardedFabricTools

# Get the certificate object
$cert = Get-Item "Cert:\LocalMachine\My\$certificateThumbprint"

# Get the gMSA account name
$gMSA = (Get-IISAppPool -Name KeyProtection).ProcessModel.UserName

# Grant the gMSA read access to the certificate
$cert.Acl = $cert.Acl | Add-AccessRule $gMSA Read Allow

Udzielanie dostępu do kluczy prywatnych opartych na module HSM lub niestandardowym dostawcy

Jeśli klucze prywatne certyfikatu są wspierane przez sprzętowy moduł zabezpieczeń (HSM) lub niestandardowy dostawca magazynu kluczy (KSP), model uprawnień zależy od określonego dostawcy oprogramowania. Aby uzyskać najlepsze wyniki, zapoznaj się z dokumentacją dostawcy lub witryną pomocy technicznej, aby uzyskać informacje na temat sposobu obsługi uprawnień klucza prywatnego dla określonego urządzenia/oprogramowania. We wszystkich przypadkach gMSA używane przez usługę HGS wymaga uprawnień do odczytu na kluczach prywatnych certyfikatów szyfrowania, podpisywania i komunikacji, dzięki czemu może wykonywać operacje podpisywania i szyfrowania.

Niektóre sprzętowe moduły zabezpieczeń nie obsługują udzielania określonych kont użytkowników dostępu do klucza prywatnego; zezwalają one na dostęp konta komputera do wszystkich kluczy w określonym zestawie kluczy. W przypadku takich urządzeń zwykle wystarczy nadać komputerowi dostęp do kluczy, a usługa HGS może korzystać z tego połączenia.

Porady dotyczące modułów HSM

Poniżej przedstawiono sugerowane opcje konfiguracji ułatwiające pomyślne korzystanie z kluczy opartych na module HSM z usługą HGS w oparciu o środowisko firmy Microsoft i jego partnerów. Te porady są dostarczane dla wygody i nie mają gwarancji, że są poprawne w czasie czytania, ani nie są one zatwierdzone przez producentów HSM. Skontaktuj się z producentem modułu HSM, aby uzyskać dokładne informacje dotyczące konkretnego urządzenia, jeśli masz dodatkowe pytania.

Marka/seria HSM Sugestia
Gemalto SafeNet Upewnij się, że właściwość Użycie klucza w pliku żądania certyfikatu jest ustawiona na 0xa0, co umożliwia użycie certyfikatu do podpisywania i szyfrowania. Ponadto należy przyznać kontu gMSA dostęp do odczytu do klucza prywatnego przy użyciu lokalnego narzędzia menedżera certyfikatów (zobacz kroki powyżej).
nCipher nShield Upewnij się, że każdy węzeł usługi HGS ma dostęp do środowiska zabezpieczeń zawierającego klucze podpisywania i szyfrowania. Ponadto może być konieczne przyznanie grupie dostępu do odczytu zarządzanego przez administratora kluczy prywatnych przy użyciu lokalnego menedżera certyfikatów (zobacz kroki powyżej).
Utimaco CryptoServers Upewnij się, że właściwość Użycie klucza w pliku żądania certyfikatu jest ustawiona na 0x13, co umożliwia użycie certyfikatu do szyfrowania, odszyfrowywania i podpisywania.

Żądania certyfikatów

Jeśli używasz urzędu certyfikacji do wystawiania certyfikatów w środowisku infrastruktury kluczy publicznych (PKI), musisz upewnić się, że żądanie certyfikatu zawiera minimalne wymagania dotyczące użycia tych kluczy przez usługę HGS.

Podpisywanie certyfikatów

Właściwość CSR Wartość wymagana
Algorytm RSA
Key size Co najmniej 2048 bitów
Użycie klucza Podpis/Znak/DigitalSignature

Certyfikaty szyfrowania

Właściwość CSR Wartość wymagana
Algorytm RSA
Key size Co najmniej 2048 bitów
Użycie klucza Szyfrowanie/szyfrowanie/szyfrowanie/szyfrowanie danych

Szablony usług certyfikatów Active Directory

Jeśli używasz szablonów certyfikatów usług certyfikatów Active Directory (ADCS) do tworzenia certyfikatów, zalecamy użycie szablonu z następującymi ustawieniami:

Właściwość szablonu usługi ADCS Wartość wymagana
Kategoria dostawcy Dostawca magazynu kluczy
Nazwa algorytmu RSA
Minimalny rozmiar klucza 2048
Purpose Podpis i szyfrowanie
Rozszerzenie użycia klucza Podpis cyfrowy, szyfrowanie kluczy, szyfrowanie danych ("Zezwalaj na szyfrowanie danych użytkownika")

Dryf czasu

Jeśli czas serwera znacznie dryfował z innych węzłów usługi HGS lub hostów funkcji Hyper-V w chronionej sieci szkieletowej, mogą wystąpić problemy z ważnością certyfikatu podpisywania zaświadczania. Certyfikat zaświadczania jest tworzony i odnawiany w tle w usłudze HGS i służy do podpisywania certyfikatów kondycji wystawionych dla chronionych hostów przez usługę zaświadczania.

Aby odświeżyć certyfikat podpisywania zaświadczania, uruchom następujące polecenie w wierszu polecenia programu PowerShell z podwyższonym poziomem uprawnień.

Start-ScheduledTask -TaskPath \Microsoft\Windows\HGSServer -TaskName
AttestationSignerCertRenewalTask

Alternatywnie można ręcznie uruchomić zaplanowane zadanie, otwierając harmonogram zadań (taskschd.msc), przechodząc do biblioteki>harmonogramu zadań Microsoft>Windows>HGSServer i uruchamiając zadanie o nazwie AttestationSignerCertRenewalTask.

Przełączanie trybów zaświadczania

Jeśli przełączysz usługę HGS z trybu modułu TPM do trybu usługi Active Directory lub na odwrót przy użyciu polecenia cmdlet Set-HgsServer , może upłynąć do 10 minut, aby każdy węzeł w klastrze HGS zaczął wymuszać nowy tryb zaświadczania.

To normalne zachowanie.

Zaleca się, aby nie usuwać żadnych zasad zezwalających na hosty z poprzedniego trybu zaświadczania, dopóki nie potwierdzisz, że wszystkie hosty pomyślnie zaświadczają przy użyciu nowego trybu zaświadczania.

Znany problem podczas przełączania z modułu TPM do trybu usługi AD

Jeśli klaster usługi HGS został zainicjowany w trybie modułu TPM, a później przełączysz się do trybu usługi Active Directory, istnieje znany problem uniemożliwiający przełączenie innych węzłów w klastrze usługi HGS do nowego trybu zaświadczania. Aby upewnić się, że wszystkie serwery HGS wymuszają prawidłowy tryb zaświadczania, uruchom polecenie Set-HgsServer -TrustActiveDirectory w każdym węźle klastra usługi HGS.

Ten problem nie ma zastosowania, jeśli przełączasz się z trybu TPM do trybu usługi AD, a klaster został pierwotnie skonfigurowany w trybie usługi AD.

Możesz sprawdzić tryb zaświadczania serwera HGS, uruchamiając polecenie Get-HgsServer.

Zasady szyfrowania zrzutu pamięci

Jeśli próbujesz skonfigurować zasady szyfrowania zrzutu pamięci i nie widzisz domyślnych zasad zrzutu HGS (Hgs_NoDumps, Hgs_DumpEncryption i Hgs_DumpEncryptionKey) lub polecenia cmdlet zasad zrzutu (Add-HgsAttestationDumpPolicy), prawdopodobnie nie masz zainstalowanej najnowszej aktualizacji zbiorczej.

Aby rozwiązać ten problem, zaktualizuj serwer HGS do najnowszej aktualizacji zbiorczej systemu Windows i aktywuj nowe zasady zaświadczania.

Upewnij się, że hosty funkcji Hyper-V zostaną zaktualizowane do tej samej aktualizacji zbiorczej przed aktywowaniem nowych zasad zaświadczania, ponieważ hosty, które nie mają zainstalowanych nowych funkcji szyfrowania zrzutu, prawdopodobnie zakończą się niepowodzeniem po aktywowaniu zasad usługi HGS.

Komunikaty o błędach certyfikatu klucza poręczenia

Podczas rejestrowania hosta przy użyciu polecenia cmdlet Add-HgsAttestationTpmHost dwa identyfikatory modułu TPM są wyodrębniane z podanego pliku identyfikatora platformy: certyfikat klucza poręczenia (EKcert) i klucz poręczenia publicznego (EKpub). EKcert identyfikuje producenta modułu TPM, zapewniając pewność, że moduł TPM jest autentyczny i wyprodukowany za pośrednictwem normalnego łańcucha dostaw. EKpub jednoznacznie identyfikuje ten konkretny moduł TPM i jest jedną z miar używanych przez usługę HGS w celu udzielenia dostępu hosta do uruchamiania chronionych maszyn wirtualnych.

Podczas rejestrowania hosta modułu TPM zostanie wyświetlony błąd, jeśli jeden z dwóch warunków jest spełniony:

  • Plik identyfikatora platformy nie zawiera certyfikatu klucza poręczenia.
  • Plik identyfikatora platformy zawiera certyfikat klucza poręczenia, ale ten certyfikat nie jest zaufany w systemie.

Niektórzy producenci modułu TPM nie dołączają certyfikatów EKcert do swoich modułów TPM.

Jeśli podejrzewasz, że tak jest w przypadku modułu TPM, potwierdź z producenta OEM, że moduły TPM nie powinny mieć certyfikatu -Force EKcert i użyj flagi , aby ręcznie zarejestrować hosta w usłudze HGS. Jeśli moduł TPM powinien mieć certyfikat EKcert, ale nie został znaleziony w pliku identyfikatora platformy, upewnij się, że używasz konsoli programu PowerShell administratora (z podwyższonym poziomem uprawnień) podczas uruchamiania polecenia Get-PlatformIdentifier na hoście.

Jeśli został wyświetlony błąd, że certyfikat EKcert jest niezaufany, upewnij się, że zainstalowano pakiet zaufanych certyfikatów głównych modułu TPM na każdym serwerze usługi HGS i że certyfikat główny dostawcy modułu TPM znajduje się w magazynie "TrustedTPM_RootCA" komputera lokalnego. Wszystkie odpowiednie certyfikaty pośrednie muszą być również zainstalowane w magazynie "TrustedTPM_IntermediateCA" na komputerze lokalnym. Po zainstalowaniu certyfikatów głównych i pośrednich powinno być możliwe pomyślne uruchomienie Add-HgsAttestationTpmHost .

Uprawnienia konta usługi zarządzanej przez grupę (gMSA)

Konto usługi HGS (gMSA używane na potrzeby puli aplikacji usługi ochrony kluczy w usługach IIS) musi mieć przyznane uprawnienie Generowanie inspekcji zabezpieczeń, znane również jako SeAuditPrivilege. Jeśli brakuje tego uprawnienia, początkowa konfiguracja usługi HGS powiedzie się, a usługi IIS uruchamiają się, jednak usługa ochrony kluczy nie działa i zwraca błąd HTTP 500 ("Błąd serwera w aplikacji /KeyProtection"). W dzienniku zdarzeń aplikacji mogą być również obserwowane następujące komunikaty ostrzegawcze.

System.ComponentModel.Win32Exception (0x80004005): A required privilege is not held by the client
at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.NativeUtility.RegisterAuditSource(String pszSourceName, SafeAuditProviderHandle& phAuditProvider)
at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.SecurityLog.RegisterAuditSource(String sourceName)

lub

Failed to register the security event source.
   at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

Failed to register the security event source.
   at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.SecurityLog.RegisterAuditSource(String sourceName)
   at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.SecurityLog.ReportAudit(EventLogEntryType eventType, UInt32 eventId, Object[] os)
   at Microsoft.Windows.KpsServer.KpsServerHttpApplication.Application_Start()

A required privilege is not held by the client
   at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.NativeUtility.RegisterAuditSource(String pszSourceName, SafeAuditProviderHandle& phAuditProvider)
   at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.SecurityLog.RegisterAuditSource(String sourceName)

Ponadto można zauważyć, że żadne z poleceń cmdlet usługi ochrony kluczy (na przykład Get-HgsKeyProtectionCertificate) nie działa i zamiast tego zwraca błędy.

Aby rozwiązać ten problem, musisz udzielić gMSA "Generowanie inspekcji zabezpieczeń" (SeAuditPrivilege). W tym celu można użyć zasad zabezpieczeń lokalnych SecPol.msc w każdym węźle klastra usługi HGS lub zasad grupy. Alternatywnie możesz użyć narzędzia SecEdit.exe do wyeksportowania bieżących zasad zabezpieczeń, wprowadzić niezbędne zmiany w pliku konfiguracji (czyli zwykły tekst), a następnie zaimportować je z powrotem.

Uwaga

Podczas konfigurowania tego ustawienia lista zasad zabezpieczeń zdefiniowanych dla uprawnień w pełni zastępuje wartości domyślne (nie łączy się). W związku z tym podczas definiowania tego ustawienia zasad należy uwzględnić zarówno domyślnych posiadaczy tego uprawnienia (usługa sieciowa i usługa lokalna) oprócz dodawanego konta zarządzanego przez Użytkownika.