Статус: Участник
Группы: Участники
Зарегистрирован: 01.06.2015(UTC) Сообщений: 11
|
Добрый день! Задача такая: необходимо на клиенте подписывать файлы, лежащие на сервере. Для этого я на сервере формирую хеш нужного файла, отдаю его на клиент, там создается подпись, там же проверяется, после этого полученную строку я отправляю на сервер и пытаюсь сохранить в .sig файл. Проблема в том, что проверку такой файл в онлайн сервисах (http://www.gosuslugi.ru/pgu/eds/) не проходит.
Получение хеша: var GostHash = new Gost3411CryptoServiceProvider(); byte[] HashValue = GostHash.ComputeHash(fs); var str = HashValue.Aggregate("", (current, t) => current + string.Format("{0:X2}", t));
str отправляем на клиент
На клиенте: ... function CreateSignature(oCertificate, oHashedData) { var oRawSignature = cadesobject.CreateObject("CAdESCOM.RawSignature"); try { var sRawSignature = oRawSignature.SignHash(oHashedData, oCertificate); } catch (err) { alert("Failed to create signature. Error: " + GetErrorMessage(err)); return; } return sRawSignature; } ...
sRawSignature отправляется на сервер
И на сервере сохраняется в файл:
byte[] bytesSign = Convert.FromBase64String(sRawSignature); //подпись в Base64 формате var ms = new MemoryStream(bytesSign); var file = new FileStream("file.sig", FileMode.OpenOrCreate, FileAccess.Write); ms.WriteTo(file); file.Close(); ms.Close();
В чем ошибка логики? Или я не отделенную подпись таким образом создаю? Или сохраняю неправильно?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
В код не смотрел, достаточно для начала: >подпись в Base64 формате >http://www.gosuslugi.ru/pgu/eds/ >Или сохраняю неправильно?
На сайте написано DER, верно? Тогда зачем дополнительное кодирование в base64? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.06.2015(UTC) Сообщений: 11
|
С сайта: > Данный сервис предназначен для подтверждения подлинности ЭП сертификатов в форматах X.509 и BASE64. Вот эта функция разве не в base64 возвращает:oRawSignature.SignHash(oHashedData, oCertificate) ? И все таки уточню, она именно отсоединенную подпись возвращает?
PS У меня файл может быть любого расширения, поэтому подписываю я его не привязываясь к формату. Может быть поэтому сервис их не проверяет?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.06.2015(UTC) Сообщений: 11
|
А вообще, каким образом лучше всего подписывать произвольные файлы, чтобы получатель потом мог проверить подпись?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: daryaNeko С сайта: > Данный сервис предназначен для подтверждения подлинности ЭП сертификатов в форматах X.509 и BASE64. Вот эта функция разве не в base64 возвращает:oRawSignature.SignHash(oHashedData, oCertificate) ? И все таки уточню, она именно отсоединенную подпись возвращает?
PS У меня файл может быть любого расширения, поэтому подписываю я его не привязываясь к формату. Может быть поэтому сервис их не проверяет? А причем здесь подтверждения подлинности ЭП сертификатов? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.06.2015(UTC) Сообщений: 11
|
Хорошо, не важно что там этот сервис проверяющий говорит. Ответьте, пожалуйста на остальные вопросы, чтобы я смогла сориентироваться. Что именно (подписанный файл, отсоединенную подпись, вообще что-то другое) и в каком формате возвращает функция oRawSignature.SignHash(oHashedData, oCertificate) ? Пригоден ли результат этой функции как содержание для .sig файла? Произвольные файлы вообще та кподписывают ли это неправильно? Каким образом получатель сможет проверить подписан ли файл?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.06.2015(UTC) Сообщений: 11
|
Ага, а как теперь из этого строкового значение сформировать непосредственно файл подписи? Просто сохранить полученную строку? Или надо преобразовать ее каким либо образом?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.06.2015(UTC) Сообщений: 11
|
Сформировала файл подписи через криптоАрм, получаются значения вида MIAGCSqGSIb3DQEHAqCAMIACAQExDDAKBgYqhQMCAgkFADCABgkqhkiG9w0BBwEA (32 подобных строки) А мне функция вовращает строку вида 56416ABC12B71BCEB5D4DEEB615C0A84055B8C545C27123383AF65DCE66F6374289689404A7704E9E8E87555612023C443296C9E9822DB0B522275FBBE47CA50 Как мою строку преобразовать к верному виду?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.06.2015(UTC) Сообщений: 11
|
И еще, в файле подписи, созданном через КриптоАрм явно больше данных, чем получается у меня программно, там видно и сертификат и еще какие-то данные... Как мне включить в мою подпись всю эту информацию?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close