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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Vlad_Alymov  
#1 Оставлено : 12 июля 2024 г. 0:17:09(UTC)
Vlad_Alymov

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

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

Сказал(а) «Спасибо»: 3 раз
Доброй ночи!

Подскажите, пожалуйста, по ошибке. У заказчика имеется Astra Linux 2.12.45 (Orel) и КриптоПро CSP 5.0 13000 KC1 x64. Единственный контейнер с ключами обмена (AT_KEYEXCHANGE) находится на диске (носитель HDIMAGE). При попытке получения отпечатка ключа при помощи CryptGetProvParam с параметром PP_EXCHANGE_KEY_FP выдаётся ошибка с кодом 87 (0x57) - ERROR_INVALID_PARAMETER. Тестирование контейнера успешно. На нашем тестовом окружении с аналогичными ОС, КриптоПро CSP ошибка не воспроизводится - контейнер находится, подпись успешно формируется (и в других окружениях ALT, Red OS, Windows этот функционал работает). На всякий случай приведу адаптированный код:

Код:
if (CryptAcquireContext(&hCryptProv, NULL, szProviderName, dwProviderType, CRYPT_VERIFYCONTEXT))
{
	if (CryptImportPublicKeyInfo(hCryptProv, pCertContext->dwCertEncodingType, &pCertContext->pCertInfo->SubjectPublicKeyInfo, &hKey))
	{
		if (CryptGetKeyParam(hKey, KP_FP, NULL, &dwCertFP, 0))
		{
			if (pbCertFP = (BYTE *) malloc(dwCertFP))
			{
				if (CryptGetKeyParam(hKey, KP_FP, pbCertFP, &dwCertFP, 0))
					dwKeyFP = dwCertFP;
			}
		}
	}
	if (hKey)
		CryptDestroyKey(hKey);
	if (hCryptProv)
		CryptReleaseContext(hCryptProv, 0);
}
if (CryptAcquireContext(&hCryptEnumProv, NULL, szProviderName, dwProviderType, CRYPT_VERIFYCONTEXT))
{
...
  while (CryptGetProvParam(hCryptEnumProv, PP_ENUMCONTAINERS, pbData, &cbSize, dwParams))
  {
...
    if (CryptAcquireContext(&hCryptProv, szContainerName, szProviderName, dwProviderType, CRYPT_VERIFYCONTEXT))
    {
	    if (pbKeyFP = (BYTE *) malloc(dwKeyFP))
	    {
		    // Вызов завершается ошибкой 87 (0x57) - ERROR_INVALID_PARAMETER
		    if (CryptGetProvParam(hCryptProv, PP_EXCHANGE_KEY_FP, pbKeyFP, &dwKeyFP, 0))
		    {
			    // сравнение отпечатков pbKeyFP и pbCertFP и другие действия
		    }
	    }
    }
...
  }
}


Что можете посоветовать?

Отредактировано пользователем 12 июля 2024 г. 0:18:35(UTC)  | Причина: Не указана

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