Ошибки0x80090016

Ошибка 0x80090016 «Набор ключей не существует»: как исправить

Почему КриптоПро и cadesplugin выдают 0x80090016 при подписи в ЕИС, ЛК ФНС и Госуслугах и как вернуть связь сертификата с закрытым ключом

Ошибка 0x80090016 «Набор ключей не существует» появляется в момент подписи: в ЕИС при подаче заявки, в ЛК ФНС, в Честном Знаке, на Госуслугах или в любой программе, которая работает через КриптоПро CSP. Сертификат при этом виден в списке, но система не может найти к нему закрытый ключ. Обычно исправление занимает 10-20 минут и не требует перевыпуска подписи

Коротко: что делать

  1. Проверьте, что токен вставлен и виден системе (горит индикатор, носитель есть в панели Рутокен или в Едином клиенте JaCarta)
  2. Удалите сертификат из хранилища «Личное» и установите его заново через КриптоПро CSP → Сервис → Просмотреть сертификаты в контейнере
  3. Если ключ лежит в реестре, убедитесь, что вы вошли в Windows под тем же пользователем, под которым ключ копировали
  4. Проверьте контейнер командой csptest -keyset -check (раздел «Диагностика»)

Что означает ошибка

0x80090016 - это стандартный код Windows CryptoAPI NTE_BAD_KEYSET, по-английски «Keyset does not exist». Подпись состоит из двух частей:

В свойствах сертификата записано, в каком контейнере искать ключ. Ошибка 0x80090016 значит: сертификат на месте, а контейнер по записанному адресу не найден или недоступен

Причины

  1. Сертификат установлен из файла .cer без привязки к контейнеру. Самая частая причина. Сертификат двойным щелчком поставили в «Личное», а ссылки на ключ в нём нет
  2. Носитель не подключён или не виден системе. Не установлен драйвер Рутокен или Единый клиент JaCarta, остановлена служба «Смарт-карта», токен вставлен в неисправный порт или USB-хаб
  3. Ключ лежит в реестре другого пользователя Windows. Контейнеры в реестре хранятся отдельно для каждой учётной записи. Ключ, скопированный под пользователем «Бухгалтер», не виден пользователю «Администратор» и на другом компьютере
  4. В КриптоПро не добавлен считыватель. Например, удалён считыватель «Все считыватели смарт-карт» или «Реестр», и CSP не заглядывает туда, где лежит ключ
  5. Контейнер удалён или повреждён. Флешку отформатировали, токен инициализировали заново, ключ стёрли при чистке реестра

Диагностика

Шаг 1. Посмотрите, какие контейнеры видит КриптоПро

Откройте командную строку (Пуск → cmd) и выполните:

cd "C:\Program Files\Crypto Pro\CSP"
csptest -keyset -enum_cont -verifycontext -fqcn

Команда выведет полные имена всех доступных контейнеров. По префиксу видно, где лежит ключ:

Префикс Где ключ
\\.\Aktiv Rutoken ...\ на Рутокене
\\.\JaCarta ...\ или \\.\ARDS JaCarta ...\ на JaCarta
\\.\FAT12_E\ (буква диска) на флешке
\\.\REGISTRY\ в реестре текущего пользователя
\\.\HDIMAGE\ в файлах на жёстком диске

Если нужного контейнера в списке нет, причина в носителе или в учётной записи (причины 2-5). Если контейнер есть, почти наверняка сертификат не привязан к нему (причина 1)

Шаг 2. Проверьте сам контейнер

Подставьте полное имя контейнера из шага 1:

csptest -keyset -check -cont "\\.\Aktiv Rutoken lite 0\имя_контейнера"

В последней строке вывода должно быть [ErrorCode: 0x00000000], это значит, что контейнер исправен. Если вместо нулей стоит 0x80090016, ключ по этому адресу не открывается: проверьте носитель и считыватели (способы 2 и 4)

Ту же проверку можно сделать без командной строки: КриптоПро CSP → Сервис → Протестировать → Обзор, выбрать контейнер и нажать ОК

Шаг 3. Проверьте, к чему привязан сертификат

certutil -user -store My

Найдите в выводе свой сертификат по ФИО или организации и посмотрите строки Контейнер ключа и Поставщик. Для ГОСТ-подписи поставщик должен быть Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider или Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider. Если этих строк у сертификата нет, он установлен без привязки к закрытому ключу

Решение

Способ 1. Переустановить сертификат с привязкой к контейнеру

Помогает в большинстве случаев

  1. Вставьте носитель с ключом
  2. Нажмите Win + R, введите certmgr.msc и нажмите Enter
  3. Откройте Личное → Сертификаты, найдите свой сертификат, щёлкните правой кнопкой и выберите Удалить. Ключ при этом не удаляется, удаляется только запись сертификата в хранилище
  4. Откройте Пуск → КриптоПро → КриптоПро CSP → вкладка Сервис
  5. Нажмите Просмотреть сертификаты в контейнере → Обзор
  6. Выберите контейнер (ориентируйтесь на считыватель из шага 1 диагностики) и нажмите ОК → Далее
  7. Проверьте ФИО и срок действия в открывшемся сертификате и нажмите Установить
  8. Перезапустите браузер полностью и повторите подпись

Если в контейнере нет сертификата, а он есть у вас отдельным файлом .cer, используйте Сервис → Установить личный сертификат, выберите файл и отметьте Найти контейнер автоматически

Способ 2. Вернуть носитель в систему

  1. Переставьте токен в другой USB-порт напрямую, без хабов и удлинителей
  2. Проверьте, что токен виден в Панели управления Рутокен или в Едином клиенте JaCarta. Если программы нет, скачайте драйвер с официального сайта производителя: rutoken.ru для Рутокен, aladdin-rd.ru для JaCarta
  3. Нажмите Win + R, введите services.msc, найдите службу Смарт-карта и убедитесь, что она в состоянии Выполняется, а тип запуска Автоматически
  4. Повторите шаг 1 диагностики: контейнер должен появиться в списке

Способ 3. Разобраться с ключом в реестре

Контейнеры со считывателем «Реестр» хранятся в ветке конкретного пользователя Windows. Узнайте SID своей учётной записи:

whoami /user

Ключи текущего пользователя лежат здесь (<SID> - значение из команды выше):

64-битная Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Crypto Pro\Settings\Users\<SID>\Keys

32-битная Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\<SID>\Keys

Откройте редактор реестра (Win + R → regedit, от имени администратора) и проверьте, есть ли в этой ветке ваш контейнер

⚠️ Не удаляйте и не переименовывайте разделы в Keys. Удалённый из реестра контейнер без резервной копии не восстанавливается. Перед любыми правками сделайте копию ключа на флешку или токен через Сервис → Скопировать

После того как контейнер стал доступен, выполните способ 1

Способ 4. Добавить считыватели в КриптоПро

  1. Откройте КриптоПро CSP → вкладка Оборудование → Настроить считыватели (нужны права администратора)
  2. Проверьте, что в списке есть Все считыватели смарт-карт, Все съёмные диски и Реестр
  3. Недостающий добавьте кнопкой Добавить и пройдите мастер
  4. Перезагрузите компьютер и повторите диагностику

Если контейнер удалён

Если ни на одном носителе контейнера нет, а резервной копии не осталось, закрытый ключ утерян. Никакая программа его не восстановит. Нужно обратиться в удостоверяющий центр, который выдал подпись (для руководителей организаций и ИП - в ФНС), и выпустить новый сертификат

Чем отличается от «Указан неправильный алгоритм» (0x80090008)

Эти ошибки часто путают. «Указан неправильный алгоритм» - это другой код, 0x80090008 (NTE_BAD_ALGID). Он означает, что ключ найден, но операцию нельзя выполнить выбранным алгоритмом или криптопровайдером. Типичные причины:

Решение 0x80090008 - обновить КриптоПро CSP до актуальной версии и переустановить сертификат способом 1

Если не помогло

Если ошибка осталась или нет времени разбираться перед подачей заявки или сдачей отчёта, инженер prokep.ru подключится к вашему компьютеру удалённо и решит проблему при вас

Напишите в Telegram @prokep_bot или в мессенджер MAX. Пришлите скриншот ошибки и укажите, на какой площадке она появилась

Частые вопросы

Удалится ли подпись, если удалить сертификат из хранилища «Личное»?

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

Ошибка 0x80090016 и «Указан неправильный алгоритм» - это одно и то же?

Нет. «Указан неправильный алгоритм» - это код 0x80090008 (NTE_BAD_ALGID), он про несовпадение алгоритма или криптопровайдера. 0x80090016 означает, что система не нашла закрытый ключ

Можно ли восстановить ключ, если токен отформатировали?

Нет. Закрытый ключ без резервной копии не восстанавливается. Если копии нет, выход один - выпустить новый сертификат в удостоверяющем центре или в ФНС

Нужно ли переустанавливать КриптоПро CSP?

Обычно нет. В большинстве случаев достаточно заново установить сертификат с привязкой к контейнеру. Переустановка CSP нужна, только если тест в КриптоПро падает на всех контейнерах сразу

Не помогло?

Инженер решит проблему удалённо при вас

  • · подключение по разовому паролю через RuDesktop или AnyDesk
  • · пароли и PIN-код токена вводите только вы
  • · официальный чек самозанятого после работы

Пришлите скриншот ошибки и напишите, на какой площадке она появилась