Статус: Новичок
Группы: Участники
Зарегистрирован: 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. Прошу помочь разобраться, кто виноват и что делать?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Цитата:Есть предположение (судя по сообщениям на других форумах), что это как-то связано с AT_SIGNATURE и AT_KEYEXCHANGE. Прошу помочь разобраться, кто виноват и что делать? Скорее всего так и есть. Если не указывать CspParameters.KeyNumber используется Exchange. Если в контейнере есть только ключ подписи, то - при отсутствии флагов он будет сгенерирован - при наличии флага CspProviderFlags.UseExistingKey будет ошибка. pars.KeyNumber = KeyNumber.Signature должно помочь |
С уважением, Александр. |
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.11.2010(UTC) Сообщений: 8 Откуда: Москва
Поблагодарили: 2 раз в 1 постах
|
Спасибо, действительно помогло.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close