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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sedovav  
#1 Оставлено : 19 февраля 2014 г. 14:46:30(UTC)
sedovav

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

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

Сказал «Спасибо»: 5 раз
Здравствуйте,
есть необходимость на клиенте (web-приложение) подписывать бинарные данные

  1. Пришедшие с сервера в каком-либо виде. Например, в виде base-64 строки.
  2. Загружаемые с клиента. Например, файлы, выбираемые при помощи input[type=file].

Подписывать нужно именно бинарные данные, а не base64 представление. И из подписи потом (на сервере) формировать бинарные данные в виде файла. Возможно ли это с помощью CryptoPro browser plug-in?

Платформа:
- клиент - JavaScript
- сервер - .Net 4.0
Offline Юрий  
#2 Оставлено : 19 февраля 2014 г. 14:50:41(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
С уважением,
Юрий Строжевский
Offline Новожилова Елена  
#3 Оставлено : 19 февраля 2014 г. 17:03:18(UTC)
Новожилова Елена

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

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Вы можете воспользоваться свойством ContentEncoding объекта CadesSignedData. Если задать значение свойства CADESCOM_BASE64_TO_BINARY, то исходные данные, закодированные в BASE64, будут автоматически декодированы в бинарные и именно в таком (декодированном) виде будут подписаны.
Значение свойства ContentEncoding нужно задавать до того, как вы передадите сами данные в свойство Content.

1. В виде BASE64 строки - идеальный вариант для произвольных бинарных данных.
2. В каком бы виде вы не загружали данные с клиента, вы всегда можете при необходимости предварительно закодировать их в BASE64 прямо в вашем web-приложении. В JavaScript для этого есть стандартные средства.

Цитата:
И из подписи потом (на сервере) формировать бинарные данные в виде файла.

Не совсем поняла, что значит "сформировать данные из подписи".
Вы собираетесь создавать на клиенте присоединенную (attached) подпись, отправлять ее на сервер и там разбирать на 2 отдельных файла: данные и отделенная подпись?
В этом случае гораздо проще создавать сразу отделенную подпись и отправлять на сервер отдельно подпись и данные (при необходимости). А на сервере декодировать данные и подпись, пришедшие с клиента в виде base64-строк, в отдельные файлы. .Net Framework умеет декодировать из BASE64.
thanks 1 пользователь поблагодарил Новожилова Елена за этот пост.
sedovav оставлено 20.02.2014(UTC)
Offline sedovav  
#4 Оставлено : 20 февраля 2014 г. 11:52:20(UTC)
sedovav

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

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

Сказал «Спасибо»: 5 раз
Вроде все понял, спасибо!
Offline sshuvalov  
#5 Оставлено : 1 апреля 2014 г. 19:38:50(UTC)
sshuvalov

Статус: Новичок

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

Коллеги, проблема в подписании UTF-8 строки, настроил подписание на стороне браузера и валидацию на стороне сервера, если подписывать тестовые строки с латинскими символами - все проходит нормально, но если в качестве исходной строки передать например "тест" то
Во первых падает стандартный кодировщик base64 (btoa)
Во вторых, если изменить кодировщик на сторонний с поддержкой utf8 (Например https://github.com/yckart/jquery.base64.js) начинаются проблемы с валидацией. Считается неправильный хеш...
Offline Новожилова Елена  
#6 Оставлено : 1 апреля 2014 г. 19:47:07(UTC)
Новожилова Елена

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

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
А как попадает UTF-8 строка в стандартный кодировщик?
https://developer.mozill...docs/Web/API/Window.btoa

Скрипт и страница в одном файле или в разных? В каких кодировках сохранены и какая кодировка страницы указана?

Отредактировано пользователем 1 апреля 2014 г. 20:03:41(UTC)  | Причина: Не указана

Offline Новожилова Елена  
#7 Оставлено : 1 апреля 2014 г. 19:51:55(UTC)
Новожилова Елена

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

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Еще, если речь идет об отделенной подписи, то посмотрите эту статью http://cpdn.cryptopro.ru...es/content-encoding.html
Offline sshuvalov  
#8 Оставлено : 1 апреля 2014 г. 23:06:00(UTC)
sshuvalov

Статус: Новичок

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

Да, действительно, проблема решилась добавлением явной перекодировки в js файле:

var b64data = btoa(unescape(encodeURIComponent(data)));

И в Java на сервере:

data.getBytes(Charsets.UTF_8);

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