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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Da Stranger  
#1 Оставлено : 11 апреля 2011 г. 17:20:00(UTC)
Da Stranger

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

Группы: Участники
Зарегистрирован: 26.11.2010(UTC)
Сообщений: 8
Откуда: Москва

Поблагодарили: 2 раз в 1 постах
Здравствуйте,

Есть УЦ Крипто-Про, который выдаёт сертификаты. Ключи генерируются на машине с КриптоПро 3.0. При попытке их использовать через Sharpei (КриптоПро 3.6) вылетает ошибка "Ключ не существует" или "Key does not exist"


System.Security.Cryptography.CryptographicException: Ключ не существует.

at CryptoPro.Sharpei.CPUtils.GetKeyPairHelper(...)
at CryptoPro.Sharpei.Gost3410CryptoServiceProvider.GetKeyPair()
at CryptoPro.Sharpei.Gost3410CryptoServiceProvider..ctor(CspParameters parameters)
at ...button1_Click(...)


Исходный код:

Код:
            CspParameters pars = new CspParameters(75, null, "TestKey");
            pars.Flags = CspProviderFlags.UseExistingKey;
            try
            {
                CryptoPro.Sharpei.Gost3410CryptoServiceProvider prov = new CryptoPro.Sharpei.Gost3410CryptoServiceProvider(pars);
            }
            catch (System.Exception E)
            {
                MessageBox.Show(E.ToString());
            }



Контейнер, естественно, существует. Этот код прекрасно работает, если использовать ключи на КриптоПро 3.6 и сертификатом от УЦ Microsoft. Если вместо pars.Flags = CspProviderFlags.UseExistingKey указать CspProviderFlags.None, то получить доступ к ключу удаётся, но контейнер навсегда "меняется":
1) следующий вызов с pars.Flags = CspProviderFlags.UseExistingKey работает
2) prov считает, что у контейнера нет сертификата.
3) Если открыть КриптоПро CSP, выбрать там "Просмотреть сертификаты в контейнере", то он скажет, что у контейнера нет сертификата, но всё равно его отобразит.

Есть предположение (судя по сообщениям на других форумах), что это как-то связано с AT_SIGNATURE и AT_KEYEXCHANGE. Прошу помочь разобраться, кто виноват и что делать?
Offline Челпанов А.  
#2 Оставлено : 12 апреля 2011 г. 12:41:07(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Цитата:
Есть предположение (судя по сообщениям на других форумах), что это как-то связано с AT_SIGNATURE и AT_KEYEXCHANGE. Прошу помочь разобраться, кто виноват и что делать?

Скорее всего так и есть. Если не указывать CspParameters.KeyNumber используется Exchange. Если в контейнере есть только ключ подписи, то
- при отсутствии флагов он будет сгенерирован
- при наличии флага CspProviderFlags.UseExistingKey будет ошибка.

pars.KeyNumber = KeyNumber.Signature должно помочь
С уважением, Александр.
Offline Da Stranger  
#3 Оставлено : 12 апреля 2011 г. 15:37:14(UTC)
Da Stranger

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

Группы: Участники
Зарегистрирован: 26.11.2010(UTC)
Сообщений: 8
Откуда: Москва

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