Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Anibilag  
#1 Оставлено : 4 декабря 2025 г. 22:24:41(UTC)
Anibilag

Статус: Новичок

Группы: Участники
Зарегистрирован: 04.12.2025(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва

Добрый день!

CryproPro 5. Реализую подпись данных через CAPI в сервисе Windows Server 2019 по ГОСТ 34.10 2012 для передачи подписанных данных по HTTP.
Столкнулся с такой проблемой - уже на этапе подписи хеша не могу получить из контейнера закрытый ключ, дело в том что сервис 64-битный а при импорте сертификатов с закрытым ключом CryptoPro создает контейнер с закрытым ключом в ветке Crypto Pro реестра для 32-битных приложений WOW6432Node и сервис не видит этот контейнер.
Сертификат ставлю в хранилище localmachine чтобы сервис имел доступ к сертификату.

Эта проблема как-то решается? Или нужно смотреть в сторону CNG?
Мне нужна сырая отсоединенная подпись и все.
Offline Андрей *  
#2 Оставлено : 4 декабря 2025 г. 23:09:11(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,033
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2366 раз в 1861 постах
Здравствуйте.

Что значит не видит?
Причём тут реестр (считыватель, один из вариантов хранения ключей) - вообще?

Сервис работает под конкретной учётной записью - в свойствах сертификата консоли управления сертификатами - выданы полные права?


p.s.
по такой логике - не возникло вопроса, а как тогда работают сервисы от других программистов?
Тот же веб-сервис?

Snimok ehkrana ot 2025-12-05 00-03-34.png (18kb) загружен 5 раз(а). Snimok ehkrana ot 2025-12-05 00-03-03.png (24kb) загружен 3 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#3 Оставлено : 4 декабря 2025 г. 23:10:53(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,033
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2366 раз в 1861 постах
Автор: Anibilag Перейти к цитате

Сертификат ставлю в хранилище localmachine чтобы сервис имел доступ к сертификату.


Через панель управления КриптоПРО CSP и он имеет ссылку на закрытый ключ при просмотре в хранилище Личное локального компьютера и тест по сертификату выполняется успешно? Только после этого - выдавать права учётной записи.

Техническую поддержку оказываем тут
Наша база знаний
Offline Anibilag  
#4 Оставлено : 5 декабря 2025 г. 11:39:02(UTC)
Anibilag

Статус: Новичок

Группы: Участники
Зарегистрирован: 04.12.2025(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва

Добрый день.

Тест по сертификату выполняется успешно.
Моя служба Windows работает под Local System и в настройках ACLключа SYSTEM присутствует и имеет все права.

Вот мой кусок кода, где возникает ошибка:

Код:
CRYPT_KEY_PROV_INFO* pProvInfo = (CRYPT_KEY_PROV_INFO*)new BYTE[dwDataLen];
  if (!CertGetCertificateContextProperty(
      m_pCertContext,
      CERT_KEY_PROV_INFO_PROP_ID,
      pProvInfo,
      &dwDataLen))
  {
      delete[] pProvInfo;
      throw Error(0, "Failed to get KEY_PROV_INFO");
  }

  // Открываем контейнер ключей CryptoPro
  if (!CryptAcquireContextW(
      &m_hProv,
      pProvInfo->pwszContainerName,
      pProvInfo->pwszProvName,
      pProvInfo->dwProvType,
      CRYPT_SILENT))
  {
      delete[] pProvInfo;
      throw Error(GetLastError(), "CryptAcquireContext failed");
  }


На момент вызова CryptAcquireContextW значения в pProvInfo соответственно REGISTRY\\\\9b7e623f7-df2f-5f83-7565-8608fe33290 Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider и 80
Получаю ошибку 0x80090016 в LastError что означает Keyset does not exist
Offline Андрей *  
#5 Оставлено : 5 декабря 2025 г. 13:54:47(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,033
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2366 раз в 1861 постах
При тестировании по сертификату - в отчёте есть информация по уникальному имени,
совпадает с "REGISTRY\\\\9b7e623f7-df2f-5f83-7565-8608fe33290" ?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#6 Оставлено : 5 декабря 2025 г. 14:04:29(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,033
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2366 раз в 1861 постах
https://learn.microsoft....ypt-cryptacquirecontextw
flags
CRYPT_MACHINE_KEYSET + CRYPT_SILENT
Техническую поддержку оказываем тут
Наша база знаний
Offline Anibilag  
#7 Оставлено : 5 декабря 2025 г. 17:56:56(UTC)
Anibilag

Статус: Новичок

Группы: Участники
Зарегистрирован: 04.12.2025(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва

Огромное спасибо, все получилось!
Упустил момент про этот флаг.

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

В доке Microsoft функция CryptAcquireContext отмечена как устаревшая, и пишут что рекомендуют переходить на CNG.
В этом есть смысл? Я так понимаю, что CryptoPro поддерживает CNG но не по умолчанию и нужно это отдельно ставить?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.