Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
Аналог выполнения команды "csptest.exe -sfsign -sign..." с помощью SignedCms.ComputeSignature в Net
Статус: Участник
Группы: Участники
Зарегистрирован: 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, то сообщение проходит валидацию.
Прошу помочь специалистов в решении проблемы...
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Первое предположение - в HashValue лежит не то, что в c:\hash64. signedBytesStr получается с помощью csptest проверить? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.09.2016(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 4 раз
|
Если взять строку: var hashBase64Str = Convert.ToBase64String(HashValue); то строка равна содержимому из c:\hash64
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Т.е. в hash64 лежит base64, а подписываете Вы бинарные данные? конечно подпись не сойдется, вот это преобразование Convert.ToBase64String внутри SignedCms никто делать не будет. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.09.2016(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 4 раз
|
ContentInfo content = new ContentInfo(hashValue); как проинициализировать экземпляр ContentInfo что бы SignedCms понял что массив байт - нужно перевести в base64? (использовать конструктор public ContentInfo(Oid contentType,byte[] content)?)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
SignedCms будет подписывать именно то, что передано. Никаких преобразований делать не будет. Если именно base64 строку подписать надо, то Код:ContentInfo content = new ContentInfo(System.Text.Encoding.ASCII.GetBytes(Convert.ToBase64String(HashValue));
Ну или нужная кодировка вместо ASCII. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.09.2016(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 4 раз
|
Автор: Kirill Sobolev SignedCms будет подписывать именно то, что передано. Никаких преобразований делать не будет. Если именно base64 строку подписать надо, то Код:ContentInfo content = new ContentInfo(System.Text.Encoding.ASCII.GetBytes(Convert.ToBase64String(HashValue));
Ну или нужная кодировка вместо ASCII. Спасибо за ответ, как заработает принимающий сервис попробую данный метод.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Также в качестве проверки можно использовать csptest -sfsign -verify. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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]
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,357 Сказал «Спасибо»: 550 раз Поблагодарили: 2217 раз в 1731 постах
|
Здравствуйте.
>csptest -sfsign -verify -detached
Прикрепите файл или сообщите, файл в base64? |
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
Аналог выполнения команды "csptest.exe -sfsign -sign..." с помощью SignedCms.ComputeSignature в Net
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close