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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline syddy  
#1 Оставлено : 28 февраля 2011 г. 20:55:48(UTC)
syddy

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

Группы: Участники
Зарегистрирован: 28.02.2011(UTC)
Сообщений: 1

Прошу помощи в определении причины следующей проблемы

Время от времени windows-сервис (.NET Framework), пользующийся CSP КриптоПро, сталкивается с ошибками при вызовах CryptoAPI-функций CryptGetUserKey и CryptDestroyKey.
В обоих случаях код ошибки совершенно неинформативен - 80090020 (NTE_FAIL).


Кусок кода:

if (!CryptoAPI.CryptContextAddRef(hCryptoProvider, null, 0))
throw new Win32Exception("Ошибка при добавлении ссылки на криптопровайдер");

try
{
// определяем подходящий для данного ключа keySpec
uint dwKeySpec = CryptoAPI.AT_KEYEXCHANGE;
IntPtr userKey;

if (!CryptoAPI.CryptGetUserKey(hCryptoProvider, dwKeySpec, out userKey))
{
dwKeySpec = CryptoAPI.AT_SIGNATURE;
if (!CryptoAPI.CryptGetUserKey(hCryptoProvider, dwKeySpec, out userKey))
{
throw new Win32Exception("Ошибка получения хэндла ключа."); // !!!ошибка возникает иногда здесь!!!
}

}

IntPtr hHash;

//Получение объекта для хэширования.
if (!CryptoAPI.CryptCreateHash(hCryptoProvider, cryptoAlgId, IntPtr.Zero, 0, out hHash))
throw new Win32Exception("Ошибка при создании хэша");

try
{
byte[] buffer = encoding.GetBytes(message);

//Хэширование сообщения.
if (!CryptoAPI.CryptHashData(hHash, buffer, buffer.Length, 0))
throw new Win32Exception("Ошибка при хэшировании сообщения");

int signatureLength = 0;

//Определение размера подписи.
if (!CryptoAPI.CryptSignHash(hHash, dwKeySpec, null, 0, null, ref signatureLength))
throw new Win32Exception("Ошибка при определении размера подписи");

byte[] signature = new byte[signatureLength];

//Подпись хэша сообщения.
if (!CryptoAPI.CryptSignHash(hHash, dwKeySpec, null, 0, signature, ref signatureLength))
throw new Win32Exception("Ошибка при подписи хэша сообщения");

return Convert.ToBase64String(signature, 0, signatureLength);
}
finally
{
if (!CryptoAPI.CryptDestroyHash(hHash))
throw new Win32Exception("Ошибка при уничтожении объекта хэширования");

if (!CryptoAPI.CryptDestroyKey(userKey)) // !!!ошибка возникает иногда здесь!!!
throw new Win32Exception("Ошибка при удалении хэндла ключа");

}
}
finally
{
if (!CryptoAPI.CryptReleaseContext(hCryptoProvider, 0))
throw new Win32Exception("Ошибка при освобождении ссылки на криптопровайдер");
}


В системном eventlog никаких следов/намеков не обнаружено.
В чем может быть проблема?

Отредактировано пользователем 28 февраля 2011 г. 20:59:26(UTC)  | Причина: Не указана

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