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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline pashkin21  
#1 Оставлено : 29 сентября 2016 г. 9:14:55(UTC)
pashkin21

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
Добрый день, возникла задача в проекте .Net разрабатываемом на VS2013 в разработке модуля для подписи полученного 32-битного хэша файла.
Аналог работы данного модуля команда в командной строке:
csptest.exe -sfsign -sign -add -detached -my Иванов Иван Иванович 111111111 -password 1111 -in c:\hash64 -out C:\Sign1

В методе в модуле использую следующий код:

// create ContentInfo
ContentInfo content = new ContentInfo(HashValue);

// SignedCms represents signed data
SignedCms signedMessage = new SignedCms(content, true);


// create a signer
CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, certificate);

// sign the data
signedMessage.ComputeSignature(signer);

// create PKCS #7 byte array
byte[] signedBytes = signedMessage.Encode();
string signedBytesStr = Convert.ToBase64String(signedBytes);

При отправке сервису сообщение с подписью signedBytesStr получаю ошибку "Отсутствует или некорректная электронная подпись".
Если сервису отправляю строку ЭП полученную из файла "C:\Sign1", предварительно выполнив команду csptest.exe -sfsign, то сообщение проходит валидацию.

Прошу помочь специалистов в решении проблемы...
Offline Kirill Sobolev  
#2 Оставлено : 30 сентября 2016 г. 10:19:39(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Первое предположение - в HashValue лежит не то, что в c:\hash64.
signedBytesStr получается с помощью csptest проверить?
Техническую поддержку оказываем тут
Наша база знаний
Offline pashkin21  
#3 Оставлено : 30 сентября 2016 г. 14:37:08(UTC)
pashkin21

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
Если взять строку: var hashBase64Str = Convert.ToBase64String(HashValue);
то строка равна содержимому из c:\hash64
Offline Kirill Sobolev  
#4 Оставлено : 30 сентября 2016 г. 14:45:28(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Т.е. в hash64 лежит base64, а подписываете Вы бинарные данные?
конечно подпись не сойдется, вот это преобразование Convert.ToBase64String внутри SignedCms никто делать не будет.
Техническую поддержку оказываем тут
Наша база знаний
Offline pashkin21  
#5 Оставлено : 30 сентября 2016 г. 15:01:00(UTC)
pashkin21

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
ContentInfo content = new ContentInfo(hashValue);
как проинициализировать экземпляр ContentInfo что бы SignedCms понял что массив байт - нужно перевести в base64?
(использовать конструктор public ContentInfo(Oid contentType,byte[] content)?)
Offline Kirill Sobolev  
#6 Оставлено : 3 октября 2016 г. 10:10:38(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
SignedCms будет подписывать именно то, что передано. Никаких преобразований делать не будет.
Если именно base64 строку подписать надо, то
Код:
ContentInfo content = new ContentInfo(System.Text.Encoding.ASCII.GetBytes(Convert.ToBase64String(HashValue));

Ну или нужная кодировка вместо ASCII.
Техническую поддержку оказываем тут
Наша база знаний
Offline pashkin21  
#7 Оставлено : 3 октября 2016 г. 10:33:04(UTC)
pashkin21

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
Автор: Kirill Sobolev Перейти к цитате
SignedCms будет подписывать именно то, что передано. Никаких преобразований делать не будет.
Если именно base64 строку подписать надо, то
Код:
ContentInfo content = new ContentInfo(System.Text.Encoding.ASCII.GetBytes(Convert.ToBase64String(HashValue));

Ну или нужная кодировка вместо ASCII.


Спасибо за ответ, как заработает принимающий сервис попробую данный метод.
Offline Kirill Sobolev  
#8 Оставлено : 3 октября 2016 г. 16:26:48(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Также в качестве проверки можно использовать csptest -sfsign -verify.
Техническую поддержку оказываем тут
Наша база знаний
Offline pashkin21  
#9 Оставлено : 27 октября 2016 г. 18:28:29(UTC)
pashkin21

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
Добрый день уважаемые коллеги, в силу обстоятельств был долгое время не на месте. Сейчас о проблеме, после всевозможных попыток получения корректного значения сигнатуры подписи, данная подпись не проходит проверку по команде csptest -sfsign -verify -detached , возвращается ошибка:
An error occurred in running the program.
.\signtsf.c:613:No user cert specified. Cryptocontext will be opened automatical
y.
Error number 0x0 (0).
Операция успешно завершена.

An error occurred in running the program.
.\signtsf.c:743:Detached Signature was NOT verified

Error number 0x8009310b (2148086027).
Встречено неверное значение тега ASN1.

Total: SYS: 0,016 sec USR: 0,016 sec UTC: 0,047 sec
[ErrorCode: 0x8009310b]
Offline Андрей Писарев  
#10 Оставлено : 27 октября 2016 г. 19:37:38(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2051 раз в 1591 постах
Здравствуйте.

>csptest -sfsign -verify -detached

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