Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро CSP 5.0
»
Проблема доступа к контейнеру закрытого ключа из сервиса Windows (C++)
Статус: Новичок
Группы: Участники
Зарегистрирован: 04.12.2025(UTC) Сообщений: 3  Откуда: Москва
|
Добрый день!
CryproPro 5. Реализую подпись данных через CAPI в сервисе Windows Server 2019 по ГОСТ 34.10 2012 для передачи подписанных данных по HTTP. Столкнулся с такой проблемой - уже на этапе подписи хеша не могу получить из контейнера закрытый ключ, дело в том что сервис 64-битный а при импорте сертификатов с закрытым ключом CryptoPro создает контейнер с закрытым ключом в ветке Crypto Pro реестра для 32-битных приложений WOW6432Node и сервис не видит этот контейнер. Сертификат ставлю в хранилище localmachine чтобы сервис имел доступ к сертификату.
Эта проблема как-то решается? Или нужно смотреть в сторону CNG? Мне нужна сырая отсоединенная подпись и все.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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 раз(а). |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,033   Сказал «Спасибо»: 612 раз Поблагодарили: 2366 раз в 1861 постах
|
Автор: Anibilag  Сертификат ставлю в хранилище localmachine чтобы сервис имел доступ к сертификату. Через панель управления КриптоПРО CSP и он имеет ссылку на закрытый ключ при просмотре в хранилище Личное локального компьютера и тест по сертификату выполняется успешно? Только после этого - выдавать права учётной записи. |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,033   Сказал «Спасибо»: 612 раз Поблагодарили: 2366 раз в 1861 постах
|
При тестировании по сертификату - в отчёте есть информация по уникальному имени, совпадает с "REGISTRY\\\\9b7e623f7-df2f-5f83-7565-8608fe33290" ? |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,033   Сказал «Спасибо»: 612 раз Поблагодарили: 2366 раз в 1861 постах
|
|
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 04.12.2025(UTC) Сообщений: 3  Откуда: Москва
|
Огромное спасибо, все получилось! Упустил момент про этот флаг.
Ну и далее еще разобрался, чтобы подписался хеш в сервисе, нужно при установке сертификате не задавать pin на контейнер.
В доке Microsoft функция CryptAcquireContext отмечена как устаревшая, и пишут что рекомендуют переходить на CNG. В этом есть смысл? Я так понимаю, что CryptoPro поддерживает CNG но не по умолчанию и нужно это отдельно ставить?
|
|
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро CSP 5.0
»
Проблема доступа к контейнеру закрытого ключа из сервиса Windows (C++)
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close