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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline lunix2  
#1 Оставлено : 30 июля 2019 г. 16:45:53(UTC)
lunix2

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день, задача подписать плагином форму, содержащую несколько полей и несколько файлов, какой "good practice" для этого посоветуете?
Как отдельно подписать строку или файл, знаю, а вот как всю форму целиком, чтобы и проверять подпись было удобно.

Думал сформировать в браузере xml содержащую данные полей формы и отделенные подписи файлов, но думаю есть решение лучше? Посоветуйте пожалуйста как лучше?

Отредактировано пользователем 30 июля 2019 г. 16:46:34(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#2 Оставлено : 30 июля 2019 г. 18:16:57(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Здравствуйте.
Формализовать, подписать поля, т.е. в виде xml. Файлы отдельно. Но если требуется, можно и включить файлы, в base64. Зависит от размеров, требований к производительности.

Опять же, описать проверку, софт нужен для извлечения файлов...


Пример: эдо по приказам фнс, там есть внутри xml элемент, типа эцп полученного файла, внутри содержится файл. Итоговый xml подписан отсоединенной эп.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
lunix2 оставлено 31.07.2019(UTC)
Offline Андрей Писарев  
#3 Оставлено : 30 июля 2019 г. 18:20:13(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Еще вариант, подписывать дамп тела запроса http. Т.е. на post запрос выдает сервер в base64 дамп (все поля и значения, а также файлы) , его плагином подписать. Опять же, для чего... С ним сложнее будет работать, чем с xml
Техническую поддержку оказываем тут
Наша база знаний
Offline lunix2  
#4 Оставлено : 31 июля 2019 г. 4:11:15(UTC)
lunix2

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей Писарев Перейти к цитате
Здравствуйте.
Формализовать, подписать поля, т.е. в виде xml. Файлы отдельно. Но если требуется, можно и включить файлы, в base64. Зависит от размеров, требований к производительности.


Спасибо!

То есть из полей формирую XML, подписываю плагином его. Файлы отдельно.
Функцию подписи вызову как минимум дважды (xml и файл), для пользователя это будет прозрачно или дважды запросит пин (если он не сохранен)?

Встречал еще вариант, собирают json по форме и подписывают его, но тоже думаю процесс верификации это усложняет.

P.S. Еще актуальный вопрос, подпись файлов пользователем, когда они на сервере и доступны пользователю по ссылке. Не просить же его перезагружать в форму!? Грузить в форму base64 файла и подписывать его?

Отредактировано пользователем 31 июля 2019 г. 4:19:57(UTC)  | Причина: Не указана

Offline two_oceans  
#5 Оставлено : 31 июля 2019 г. 7:08:33(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: lunix2 Перейти к цитате
P.S. Еще актуальный вопрос, подпись файлов пользователем, когда они на сервере и доступны пользователю по ссылке. Не просить же его перезагружать в форму!? Грузить в форму base64 файла и подписывать его?
В этом случае можно грузить в форму хэш+адрес файла и подписывать их.

На самом деле, не стоит изобретать велосипед, весь вопрос напрямую предусмотрен стандартом подписи xmldsig: обычно в качестве URI в Reference указывается ссылка на тот же самый документ, но можно указать произвольный адрес ресурса, далее от ресурса считается хэш и записывается в DigestValue, все референсы формируются в SignedInfo и SignedInfo подписывается.

В итоге, Вы можете как посчитать хэш от файла по url в интернете, так и хэш от некого текста в xml документе (можете хоть каждое поле отдельно подписать или вложить значения полей в контейнер и подписать контейнер) в рамках одной подписи xmldsig (потребуется один вызов функции подписания, то есть пин-код запрашивать будет один раз, но подпись будет недействительна если хотя бы один файл/текст был изменен).

Насчет подписи загружаемых файлов, в смэв видел терминологию MTOM XOP, но в подробности не вникал. По краткому прочтению вроде как ооочень совместимо с формами, то есть для файла из формы указывается дополнительный HTTP заголовок Сontent-ID а в подписанном xml документе "вкладывается" тег xop:Include атрибут href c "cid:"+Content-ID (для подписи конечно указывается и хэш файла), потом и xml документ и файл передаются в одном HTTP запросе разделенные "MIME_boundary" ("MIME_boundary" заменяется на конкретное значение). Насколько понимаю это как вариант позволяет не кодировать файлы в base64 и сократить размер пересылаемых данных. Пример из вики
Код:
MIME-Version: 1.0
Content-Type: Multipart/Related;boundary=MIME_boundary;
...
--MIME_boundary
Content-Type: application/xop+xml; 
...

<soap:Envelope> ...
 <soap:Body> ...
     <m:photo xmlmime:contentType="image/png">
       <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" 
          href="cid:http://example.org/me.png"/></m:photo>
...

--MIME_boundary
Content-Type: image/png
Content-Transfer-Encoding: binary
Content-ID: <http://example.org/me.png>

// binary octets for png
Сервер соответственно должен принять заголовок Content-ID и сохранить что для такого-то файла из такого-то запроса был указан такой-то Content-ID. Для проверки надо будет проверить одну подпись SignedInfo и сверить все хэши со значениями в SignedInfo.

Для уже загруженных файлов соответственно можно прямо указать в теге xop:Include атрибут href на постоянный адрес файла на сервере.

Хотя конечно ничего не мешает подписать каждый файл отдельно или в форму грузить уже подписанные пары (файл+файл подписи).

Отредактировано пользователем 31 июля 2019 г. 7:36:11(UTC)  | Причина: Не указана

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