КриптоПро CSP: «Невозможно открыть ключевой контейнер» — права, контейнеры и профили (2025)

Подпись не идёт, а КриптоПро пишет «Невозможно открыть ключевой контейнер» или приложение «не видит» ключ. Такое бывает после переустановки Windows, смены доменного профиля, переноса контейнеров или банальной нехватки прав. Пройдёмся по порядку: проверим контейнеры, права и сопоставление с сертификатом — без плясок с бубном.

Коротко: что проверить сразу

  • Токен вставлен, ПИН вводится без ошибок, в «Диспетчере устройств» нет жёлтых значков по смарт‑картам/USB.
  • Ключевой контейнер находится там же, где его ищет программа: пользовательский (USER) или компьютерный (MACHINE).
  • У текущего пользователя есть права на контейнер, а профиль не «битый» и не заменён другим SID.
  • Сертификат связан с контейнером (в certmgr возле сертификата написано «У Вас есть закрытый ключ, соответствующий этому сертификату»).
Застряли? Подключусь удалённо, верну доступ к контейнеру/сертификату, починю права и сопоставление ключа. Без переустановки.

Как это устроено в Windows и КриптоПро

Ключевой контейнер хранит закрытый ключ. Он может жить на токене (Рутокен/еToken), в реестре профиля пользователя (USER) или в хранилище компьютера (MACHINE). Доступ завязан на права и SID профиля. Если профиль поменялся, переносили контейнер «вручную» или токен заблокирован — приложение не сможет открыть ключ и выдаст ошибку.

  • USER — контейнер доступен только текущему пользователю. Удобно для рабочих мест.
  • MACHINE — контейнер доступен службам/всем пользователям ПК (при наличии прав). Нужен для служб, IIS, планировщика.
  • Токен — ключ внутри смарт‑карты/USB. Доступ по ПИН, права «привязаны» к устройству.

Токен и драйверы: сначала убедимся, что носитель живой

Если ключ на Рутокене/еToken — проверьте драйверы и ПИН. Это базис, иначе остальные шаги бессмысленны.

CMD — выполнять по одной:

certutil -scinfo
mode

Первая команда спросит ПИН и покажет считыватели/карты. Если ошибок нет — идём дальше. За драйверами идите на официальные сайты Рутокен и Thales (eToken).

Смотрим контейнеры и права

CMD — выполнять по одной:

certutil -user -store my
certutil -store my
certutil -repairstore -user my *
certutil -user -store my | findstr /i "PrivateKey"

В выводе сертификатов ищите «PrivateKey Link». Если (null) — сертификат не связан с ключом. Команда repairstore пробует «прикрепить» найденный подходящий ключевой контейнер.

PowerShell — выполнять по одной:

Get-ChildItem Cert:\CurrentUser\My | Select-Object Subject, Thumbprint, HasPrivateKey
Get-ChildItem Cert:\LocalMachine\My | Select-Object Subject, Thumbprint, HasPrivateKey

Связываем сертификат с контейнером (если ключ есть, а «замка» нет)

CMD — выполнять по одной:

rem Посмотреть отпечаток сертификата в личном хранилище пользователя
certutil -user -store my

rem Восстановить связь «сертификат ↔ ключ» по отпечатку (подставьте ваш)
certutil -user -repairstore my <THUMBPRINT>

rem Для системного хранилища (если ключ должен быть MACHINE)
certutil -repairstore my <THUMBPRINT>

После успешной привязки возле сертификата в оснастке появится значок ключа и подпись «У Вас есть закрытый ключ…».

Профили и права: когда всё ломается из-за SID

Частый сценарий: поменяли доменную учётку/профиль, SID другой — доступ к контейнеру пропал. Решений два:

  1. Перенести контейнер в MACHINE (доступен службам/всем) и раздать права нужным пользователям/службам.
  2. Пересоздать контейнер под новым профилем и привязать существующий сертификат.

Перенос удобнее делать через GUI КриптоПро: Пуск → КриптоПро CSP → Сервис → Ключи → Перенос. Если контейнер на токене — проще ничего не переносить, а проверить ПИН и политику доступа.

Если контейнера не видно вообще

  • Проверьте, что компоненты КриптоПро установлены и лицензия активна.
  • Откройте certmgr.msc (для пользователя) и mmc → Добавить оснастку → Сертификаты → Учетная запись компьютера (для MACHINE) — убедитесь, что сертификат в нужном хранилище.
  • Если есть PFX с ключом — импортируйте его корректно.

CMD — выполнять по одной:

rem Импорт PFX в личное хранилище пользователя (запросит пароль)
certutil -user -f -importpfx my "D:\keys\mycert.pfx"

rem Импорт в хранилище компьютера
certutil -f -importpfx my "D:\keys\servercert.pfx"

Если импортируете .cer без ключа — «замка» не будет, это нормально. Привязываем через repairstore или устанавливаем PFX.

Диагностика: журнал и проверка подписи

PowerShell (Администратор) — выполнять по одной:

Get-WinEvent -LogName Application -MaxEvents 200 | Where-Object {$_.ProviderName -like "*Crypto*" -or $_.Message -match "ключ|контейнер|CSP"} | Select TimeCreated, ProviderName, Id, Message
Get-WinEvent -LogName System -MaxEvents 200 | Where-Object {$_.Message -match "SmartCard|смарт-карт|token"}

Для теста подписи используйте «КриптоПро CSP → Сервис → Проверка подписи» и любой файл. Если ключ открывается — проблема была в сопоставлении или правах.

FAQ

Нужно ли переносить контейнер в MACHINE для IIS/службы?

Да, либо дать службе доступ к USER-контейнеру под её аккаунтом. Проще — MACHINE и явная раздача прав.

Можно ли «скопировать» контейнер просто переносом папки?

Нет. Используйте импорт PFX или штатный перенос в КриптоПро. Иначе потеряете связь с сертификатом и права.

После привязки подпись в браузере всё равно не идёт.

Проверьте CryptoPro CAdES Browser Plug‑in/расширение и доверенные корневые УЦ. Также убедитесь, что сайт принимает нужные ГОСТ‑алгоритмы.

Читайте также: