Что означает код HRESULT 0x80090016 (NTE_BAD_KEYSET)?

 
Предыдущий Следующий
NTE_BAD_PUBLIC_KEY NTE_PROV_TYPE_NOT_DEF

NTE_BAD_KEYSET

NTE_BAD_KEYSET (0x80090016) — классическая ошибка CryptoAPI, означающая, что запрошенный контейнер ключей не удалось открыть. Контейнер может отсутствовать, быть недоступен текущему удостоверению либо запрашиваться с неправильным поставщиком или областью хранилища ключей.

Постоянные и временные контексты ключей

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

Полезные проверки

  • Проверьте имя и тип поставщика, имя контейнера и то, ожидает ли приложение пользовательский или машинный набор ключей.
  • Для служб проверяйте учётную запись службы и выбор профиля либо машинного набора ключей, а не только работу из интерактивной учётной записи администратора.
  • Создавайте контейнер с помощью CRYPT_NEWKEYSET только когда приложение формирует собственный новый ключевой материал. Отсутствующий контейнер также может означать недоступность существующего ключа или использование неправильного удостоверения.
  • Сохраняйте стабильную схему имён контейнеров: смена поставщика или области заставит существующий контейнер выглядеть отсутствующим.

См. документацию Microsoft по CryptAcquireContext.


Нужно найти другой код? Найти другой код состояния или ошибки.