Поделиться через


Устранение неполадок службы защиты узла

В этой статье описываются решения распространенных проблем, возникающих при развертывании или работе сервера службы защиты узлов (HGS) в защищенной структуре.

Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016

Если вы не уверены в характере проблемы, сначала попробуйте запустить защищенные структуры диагностика на серверах HGS и узлах Hyper-V, чтобы сузить потенциальные причины.

Сертификаты

Для работы HGS требуется несколько сертификатов, включая сертификат шифрования и подписывания, настроенный администратором, а также сертификат аттестации, управляемый самим HGS. Если эти сертификаты настроены неправильно, HGS не может обслуживать запросы от узлов Hyper-V, желающих подтвердить или разблокировать средства защиты ключей для экранированных виртуальных машин. В следующих разделах рассматриваются распространенные проблемы, связанные с сертификатами, настроенными в HGS.

Разрешения сертификатов

HGS должен иметь доступ как к открытым, так и закрытым ключам сертификатов шифрования и подписывания, добавленным в HGS отпечатком сертификата. В частности, у управляемой группы учетной записи службы (gMSA), которая запускает службу HGS, требуется доступ к ключам. Чтобы найти gMSA, используемую HGS, выполните следующую команду в командной строке PowerShell с повышенными привилегиями на сервере HGS:

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

Предоставление доступа к учетной записи gMSA для использования закрытого ключа зависит от того, где хранится ключ: на компьютере в качестве локального файла сертификата, на аппаратном модуле безопасности (HSM) или с помощью пользовательского поставщика хранилища ключей сторонних производителей.

Предоставление доступа к закрытым ключам с поддержкой программного обеспечения

Если вы используете самозаверяющий сертификат или сертификат, выданный центром сертификации, который не хранится в аппаратном модуле безопасности или поставщике пользовательского хранилища ключей, можно изменить разрешения закрытого ключа, выполнив следующие действия.

  1. Откройте локальный диспетчер сертификатов (certlm.msc).
  2. Разверните личные>сертификаты и найдите сертификат подписи или шифрования, который требуется обновить.
  3. Щелкните правой кнопкой мыши сертификат и выберите пункт "Все задачи>управления закрытыми ключами".
  4. Нажмите кнопку "Добавить ", чтобы предоставить новому пользователю доступ к закрытому ключу сертификата.
  5. В средство выбора объектов введите имя учетной записи gMSA для HGS, найденную ранее, а затем нажмите кнопку "ОК".
  6. Убедитесь, что gMSA имеет доступ на чтение к сертификату.
  7. Нажмите кнопку "ОК ", чтобы закрыть окно разрешений.

Если вы работаете hGS на сервере Core или управляете сервером удаленно, вы не сможете управлять закрытыми ключами с помощью локального диспетчера сертификатов. Вместо этого необходимо скачать модуль PowerShell средств Guarded Fabric, который позволит управлять разрешениями в PowerShell.

  1. Откройте консоль PowerShell с повышенными привилегиями на компьютере с основным сервером или используйте удаленное взаимодействие PowerShell с учетной записью с разрешениями локального администратора в HGS.
  2. Выполните следующие команды, чтобы установить модуль PowerShell средств Guarded Fabric и предоставить учетной записи gMSA доступ к закрытому ключу.
$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

Предоставление доступа к HSM или пользовательским закрытым ключам с поддержкой поставщика

Если закрытые ключи сертификата поддерживаются аппаратным модулем безопасности (HSM) или поставщиком пользовательского хранилища ключей (KSP), модель разрешений зависит от конкретного поставщика программного обеспечения. Чтобы получить наилучшие результаты, обратитесь к документации или сайту поддержки поставщика, чтобы узнать, как обрабатываются разрешения закрытого ключа для конкретного устройства или программного обеспечения. Во всех случаях gMSA, используемая HGS, требует разрешения на чтение для шифрования, подписывания и закрытых ключей сертификата связи, чтобы он смог выполнять операции подписывания и шифрования.

Некоторые аппаратные модули безопасности не поддерживают предоставление определенным учетным записям пользователей доступа к закрытому ключу; скорее, они позволяют учетной записи компьютера получать доступ ко всем ключам в определенном наборе ключей. Для таких устройств обычно достаточно предоставить компьютеру доступ к ключам и HGS может использовать это подключение.

Советы по HSM

Ниже приведены варианты конфигурации, которые помогут вам успешно использовать ключи, поддерживаемые HSM, с HGS на основе возможностей майкрософт и партнеров. Эти советы предоставляются для удобства и не гарантируют правильность во время чтения, а также не поддерживаются производителями HSM. Обратитесь к производителю HSM, чтобы получить точные сведения, относящиеся к конкретному устройству, если у вас есть дополнительные вопросы.

Бренд или серия HSM Предложение
Gemalto SafeNet Убедитесь, что свойство использования ключа в файле запроса сертификата имеет значение 0xa0, что позволяет использовать сертификат для подписи и шифрования. Кроме того, необходимо предоставить учетной записи gMSA доступ на чтение закрытого ключа с помощью средства локального диспетчера сертификатов (см. инструкции выше).
nCipher nShield Убедитесь, что каждый узел HGS имеет доступ к миру безопасности, содержащим ключи подписи и шифрования. Кроме того, может потребоваться предоставить gMSA доступ на чтение к закрытому ключу с помощью локального диспетчера сертификатов (см. инструкции выше).
Utimaco CryptoServers Убедитесь, что свойство использования ключа в файле запроса сертификата имеет значение 0x13, что позволяет использовать сертификат для шифрования, расшифровки и подписывания.

Запросы на сертификаты

Если вы используете центр сертификации для выдачи сертификатов в среде инфраструктуры открытых ключей (PKI), необходимо убедиться, что запрос на сертификат включает минимальные требования к использованию этих ключей HGS.

Подписывание сертификатов

Свойство CSR Обязательное значение
Алгоритм RSA
Key size По крайней мере 2048 бит
Использование ключа Подпись/ подпись/DigitalSignature

Сертификаты шифрования

Свойство CSR Обязательное значение
Алгоритм RSA
Key size По крайней мере 2048 бит
Использование ключа Шифрование,шифрование/шифрование/DataEncipherment

Шаблоны служб сертификатов Active Directory

Если вы используете шаблоны сертификатов служб сертификатов Active Directory (ADCS) для создания сертификатов, рекомендуется использовать шаблон со следующими параметрами:

Свойство шаблона ADCS Обязательное значение
Категория поставщика Поставщик хранилища ключей
Имя алгоритма RSA
Минимальный размер ключа 2048
Характер использования Подпись и шифрование
Расширение использования ключей Цифровая подпись, шифрование ключей, шифрование данных ("Разрешить шифрование пользовательских данных")

Смещение времени

Если время сервера значительно изменилось от других узлов HGS или узлов Hyper-V в защищенной структуре, могут возникнуть проблемы с сроком действия сертификата подписи аттестации. Сертификат подписи аттестации создается и обновляется в фоновом режиме в HGS и используется для подписывания сертификатов работоспособности, выданных защищенным узлам службой аттестации.

Чтобы обновить сертификат подписи аттестации, выполните следующую команду в командной строке PowerShell с повышенными привилегиями.

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

Кроме того, можно вручную запустить запланированную задачу, открыв планировщик задач (taskschd.msc), перейдя к библиотеке>планировщика задач Microsoft>Windows>HGSServer и выполнив задачу с именем AttestationSignerCertRenewalTask.

Переключение режимов аттестации

Если вы переключаете HGS из режима TPM в режим Active Directory или наоборот с помощью командлета Set-HgsServer , для каждого узла в кластере HGS может потребоваться до 10 минут, чтобы начать применять новый режим аттестации.

Такое поведение является нормальным.

Рекомендуется не удалять политики, разрешающие узлы из предыдущего режима аттестации, пока не убедились, что все узлы успешно используют новый режим аттестации.

Известная проблема при переходе с доверенного платформенного модуля в режим AD

Если вы инициализировали кластер HGS в режиме TPM и более поздних версиях переключения в режим Active Directory, существует известная проблема, которая предотвращает переключение других узлов в кластере HGS на новый режим аттестации. Чтобы убедиться, что все серверы HGS применяют правильный режим аттестации, запустите Set-HgsServer -TrustActiveDirectory на каждом узле кластера HGS.

Эта проблема не применяется, если вы переключаетсяе с режима TPM на режим AD, и кластер изначально был настроен в режиме AD.

Вы можете проверить режим аттестации сервера HGS, запустив Get-HgsServer.

Политики шифрования дампа памяти

Если вы пытаетесь настроить политики шифрования дампа памяти и не видите политики дампа HGS по умолчанию (Hgs_NoDumps, Hgs_DumpEncryption и Hgs_DumpEncryptionKey) или командлет политики дампа (Add-HgsAttestationDumpPolicy), скорее всего, у вас нет последнего накопительного обновления.

Чтобы устранить эту проблему, обновите сервер HGS до последнего накопительного обновления Windows и активируйте новые политики аттестации.

Убедитесь, что узлы Hyper-V обновляются до того же накопительного обновления перед активацией новых политик аттестации, так как узлы, у которых нет новых возможностей шифрования дампа, скорее всего, завершится сбоем после активации политики HGS.

Сообщения об ошибках сертификата ключа подтверждения

При регистрации узла с помощью командлета Add-HgsAttestationTpmHost два идентификатора TPM извлекаются из предоставленного файла идентификатора платформы: сертификат ключа подтверждения (EKcert) и открытый ключ подтверждения (EKpub). EKcert определяет производителя доверенного платформенного модуля, обеспечивая гарантии подлинности доверенного платформенного модуля и производства через обычную цепочку поставок. EKpub однозначно определяет конкретный TPM и является одним из мер HGS, которые используются для предоставления узла доступа к экранированных виртуальных машин.

При регистрации узла доверенного платформенного модуля возникает ошибка, если одно из двух условий имеет значение true:

  • Файл идентификатора платформы не содержит сертификат ключа подтверждения.
  • Файл идентификатора платформы содержит сертификат ключа подтверждения, но этот сертификат не является доверенным в вашей системе.

Некоторые производители TPM не включают EKcerts в их TPMs.

Если вы подозреваете, что это касается доверенного платформенного модуля, убедитесь, что у изготовителя оборудования не должен быть сертификат EKcert и используйте -Force флаг, чтобы вручную зарегистрировать узел в HGS. Если TPM должен иметь EKcert, но он не найден в файле идентификатора платформы, убедитесь, что вы используете консоль PowerShell администратора (повышенных привилегий) при запуске Get-PlatformIdentifier на узле.

Если вы получили сообщение об ошибке, что сертификат EKcert не является доверенным, убедитесь, что на каждом сервере HGS установлен пакет доверенных корневых сертификатов доверенного платформенного модуля и что корневой сертификат поставщика TPM присутствует в хранилище TrustedTPM_RootCA локального компьютера. Все применимые промежуточные сертификаты также должны быть установлены в хранилище "TrustedTPM_IntermediateCA" на локальном компьютере. После установки корневых и промежуточных сертификатов вы сможете успешно выполняться Add-HgsAttestationTpmHost .

Привилегии групповой управляемой учетной записи службы (gMSA)

Учетная запись службы HGS (gMSA, используемая для пула приложений службы защиты ключей в IIS), должна быть предоставлена привилегия "Создать аудит безопасности ", также известный как SeAuditPrivilege. Если эта привилегия отсутствует, начальная конфигурация HGS завершается успешно, и служба IIS запускается, однако служба защиты ключей не работает и возвращает ошибку HTTP 500 ("Ошибка сервера в приложении /KeyProtection"). В журнале событий приложения также могут отображаться следующие предупреждающие сообщения.

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)

or

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)

Кроме того, вы можете заметить, что ни один из командлетов службы защиты ключей (например, Get-HgsKeyProtectionCertificate) не работает и вместо этого возвращает ошибки.

Чтобы устранить эту проблему, необходимо предоставить gMSA параметру "Создать аудит безопасности" (SeAuditPrivilege). Для этого можно использовать локальную политику безопасности SecPol.msc на каждом узле кластера HGS или групповой политики. Кроме того, можно использовать средство SecEdit.exe для экспорта текущей политики безопасности, внести необходимые изменения в файл конфигурации (который является обычным текстом), а затем импортировать его обратно.

Примечание.

При настройке этого параметра список принципов безопасности, определенных для привилегии, полностью переопределяет значения по умолчанию (он не объединяет). Поэтому при определении этого параметра политики не забудьте включить как владельцев привилегий по умолчанию (сетевая служба, так и локальная служба) в дополнение к добавляемой gMSA.