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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline alexeyng  
#1 Оставлено : 14 июня 2012 г. 20:35:17(UTC)
alexeyng

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

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

Уважаемые,

Помогите разобраться со следующей проблемой
Есть работающий код
Цитата:

CspParameters param = new CspParameters(75);

param.KeyContainerName = @"FAT12\E03E84CE\le-8f7eb.000\D49E";
param.KeyPassword = new SecureString();
param.KeyPassword.AppendChar('1');
param.KeyPassword.AppendChar('2');
param.KeyPassword.AppendChar('3');

Gost3410CryptoServiceProvider Gost = new Gost3410CryptoServiceProvider(param);
Gost3411CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider();
byte[] signedData = Gost.CreateSignature(dataToSign)

А в этом коде не получается подписать, вылетает exception key does not exist при создание cmsSigner
Цитата:

ContentInfo contentInfo = new ContentInfo(dataToSign);
SignedCms signedCms = new SignedCms(contentInfo, true);
CmsSigner cmsSigner = new CmsSigner(param);
signedCms.ComputeSignature(cmsSigner);


С чем это может быть связано?
Offline Георгий Садофьев  
#2 Оставлено : 14 июня 2012 г. 20:53:15(UTC)
Георгий Садофьев

Статус: Сотрудник

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

Поблагодарили: 31 раз в 30 постах
Попробуйте после

Код:
param.KeyContainerName = @"FAT12\E03E84CE\le-8f7eb.000\D49E";


добавить
Код:
param.KeyNumber = (int) KeyNumber.KeySignature;

(ну или (int) KeyNumber.KeyExchange, смотря какой ключ в контейнере лежит. Если при создании указывали оба, то неважно)

Техническую поддержку оказываем тут
Наша база знаний
Offline alexeyng  
#3 Оставлено : 14 июня 2012 г. 21:03:37(UTC)
alexeyng

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

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

Если использовать KeyNumber.Exchange, то вылетает exception

The card cannot be accessed because the wrong PIN was presented.

В случае с KeyNumber.Signature exception key does not exist как и раньше
Offline Георгий Садофьев  
#4 Оставлено : 14 июня 2012 г. 21:06:18(UTC)
Георгий Садофьев

Статус: Сотрудник

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

Поблагодарили: 31 раз в 30 постах
Через КриптоПро CSP можете протестировать контейнер?
Что в результатах написано в полях:
Ключ обмена
Ключ подписи
Техническую поддержку оказываем тут
Наша база знаний
Offline alexeyng  
#5 Оставлено : 14 июня 2012 г. 21:12:09(UTC)
alexeyng

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

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

ключ обмена доступен
ключ подписи отсутсвует
Offline Георгий Садофьев  
#6 Оставлено : 14 июня 2012 г. 21:43:35(UTC)
Георгий Садофьев

Статус: Сотрудник

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

Поблагодарили: 31 раз в 30 постах
Тогда Вам сюда
http://www.cryptopro.ru/....aspx?g=posts&t=2930
Пост
Как подписывать CMS сообщение при помощи секретных ключей, которые имеют пароль.
пункт 3 б)
Техническую поддержку оказываем тут
Наша база знаний
Offline alexeyng  
#7 Оставлено : 14 июня 2012 г. 21:55:07(UTC)
alexeyng

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

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

Спасибо, но тут тот же код что был приведен ранее, т.е. работает через Gost3410CryptoServiceProvider, но не работает через CmsSigner. Подскажите в чем разница м.д. ними?
Offline Георгий Садофьев  
#8 Оставлено : 14 июня 2012 г. 22:02:15(UTC)
Георгий Садофьев

Статус: Сотрудник

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

Поблагодарили: 31 раз в 30 постах
Забыл сказать, чтобы Вам подписать через CmsSigner, нужно, чтобы в контейнере был сертификат.
Техническую поддержку оказываем тут
Наша база знаний
Offline alexeyng  
#9 Оставлено : 14 июня 2012 г. 22:06:14(UTC)
alexeyng

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

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

Т.е.? поясните пожалуйста, и по предыдущему вопросу тоже. Спасибо
Offline Георгий Садофьев  
#10 Оставлено : 14 июня 2012 г. 22:12:14(UTC)
Георгий Садофьев

Статус: Сотрудник

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

Поблагодарили: 31 раз в 30 постах
Чтобы вот этот код

Код:
CspParameters param = new CspParameters(75);
            
            param.KeyContainerName = @"FAT12\E03E84CE\le-8f7eb.000\D49E";
            param.KeyNumber = (int) KeyNumber.Exchange;
            param.KeyPassword = new SecureString();
            param.KeyPassword.AppendChar('1');
            param.KeyPassword.AppendChar('2');
            param.KeyPassword.AppendChar('3');

            Gost3410CryptoServiceProvider Gost = new Gost3410CryptoServiceProvider(param);

            ContentInfo contentInfo = new ContentInfo(dataToSign);
                SignedCms signedCms = new SignedCms(contentInfo, true);
                CmsSigner cmsSigner = new CmsSigner(param);
                signedCms.ComputeSignature(cmsSigner);


у Вас заработал, нужно, чтобы в контейнере закрытого ключа находился сертификат (можно, например, через КриптоПро CSP сделать).


По предыдущему вопросу
Gost.CreateSignature() вычисляет хэш от данных и подписывает их по алгоритму ГОСТ 3410
signedCms.ComputeSignature(cmsSigner) создаёт сообщение в формате PKCS

Отредактировано пользователем 14 июня 2012 г. 22:16:20(UTC)  | Причина: Не указана

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