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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline kassfb  
#1 Оставлено : 18 июля 2022 г. 20:50:29(UTC)
kassfb

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

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

Сказал(а) «Спасибо»: 2 раз
Привет Мир! Подскажите, пожалуйста:

Есть WEB-приложение (бэк на .NetCore, клиентская часть на Angular), которое достает данные из БД, отображает их в определенном виде для пользователя (таблицы), после этого пользователь может их отредактировать и скачать получившийся отчет. Скачанный файл – Excel документ в формате .xls

Сейчас появилась необходимость, чтобы полученный excel-отчет содержал КЭП пользователя, который изменяет и скачивает отчет. Т.е. прежде чем скачать документ, пользователь должен его подписать. Кроме этого, хотелось бы, чтобы при скачивании была возможность получить PDF-документ с видимой подписью.
Для получения ЭЦП пользователя планируется использовать КриптоПро CSP 5 и КриптоПро ЭЦП Browser plug-in 2.0.

На данном этапе это работает следующим образом: На серваке генерируется неподписанный отчет в Excel, он конвертится в Base64 строку и передается на клиента, когда пользователь получает эту строку, он с помощью плагина может выбрать сертификат, тип подписи (прикрепленная/открепленная) и, собственно, получает ЭЦП.
Эту подпись я сохранил в текстовый файл формата .sig и на ГосУслугах проверил - ЭП верна.

Подскажите, пожалуйста, что еще нужно и как лучше реализовывать требуемую функциональность? Допускаю, что я ошибаюсь и для этих целей в принципе плагин не предназначен? И необходимо использовать решения «КриптоПро Office Signature» и «КриптоПро PDF»

Потому что сейчас возник целый ряд незакрытых вопросов:
1) Что делать с подписью и возможно ли с помощью плагина полученную подпись «вставить» в excel-документ, чтобы его можно было открыть для чтения, и внутри было отображено, что он подписан ЭЦП пользователем ФИО, Дата и Время подписи. Чтобы пользователь не делал это вручную, на скачанном у себя на компьютере документе, а автоматически при скачивании отчета он только выбрал свой сертификат и скачал уже подписанный документ.
2) Можно ли (что требуется, чтобы) через WEB-приложение автоматически получать PDF документы с видимой подписью (с ФИО, датой и временем подписания).

P.S. Я понимаю, что формирование подписи должно происходить на стороне клиента. Это, вроде, сделал, а вот что мне делать дальше? d'oh! Буду благодарен, если объясните на пальцах.Pray

Отредактировано пользователем 19 июля 2022 г. 13:23:26(UTC)  | Причина: Не указана

Offline two_oceans  
#2 Оставлено : 19 июля 2022 г. 11:23:29(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 397 раз в 367 постах
Добрый день.
Ну, не то чтобы было совсем невозможно подписать PDF при помощи плагина, но это подход "не с той стороны".
Цитата:
На серваке генерируется неподписанный отчет в Excel, он конвертится в Base64 строку и передается на клиента, когда пользователь получает эту строку, он с помощью плагина может выбрать сертификат, тип подписи (прикрепленная/открепленная) и, собственно, получает ЭЦП. Эту подпись я сохранил в текстовый файл формата .sig и на ГосУслугах проверил - ЭП верна.
Итак, для начала определимся, что есть открепленная подпись и есть различные виды прикрепленной, причем так просто из одного вида в другой переделать сложно. Судя по описанному должна была получиться либо открепленная формата PKCS#7/CADES (если грузили на госуслуги 2 файла) либо прикрепленная такого же типа (если 1 файл). Уточню, такая прикрепленная PKCS#7/CADES подпись содержит весь исходный файл целиком, то есть "файл внутри подписи".

И тут сюрприз сюрприз - в Экселе встроенная подпись имеет формат XMLDSIG/XADES (XLSX файл это архив с кучей XML файлов), а в PDF - формат PADES. Общего между этими форматами то, что в них подписывается только часть файла (с важными данными), в основном остаются неподписанными служебные данные, и сама подпись добавляется в оставшуюся неподписанной часть файла. То есть "подпись внутри файла". При выборе подписываемой части очень сильно задействованы особенности внутреннего формата Эксель и PDF, поэтому на подпись собственно пойдет разная последовательность байт и учитываются разные нюансы форматов, например приведение XML к каноничному виду.

Следовательно сами можете сделать выводы: в одном случае CADES "файл внутри подписи", в другом XADES + PADES "подпись внутри файла", преобразовать напрямую нельзя. Между XADES и PADES аналогично. Соответственно, то что Вы подписали одним форматом никак не поможет в подписании другим. Это означает, что если нужен в итоге подписанный PDF, то делаем сначала неподписанный PDF из неподписанного Экселя потом PDF подписываем. Идея подписывать Эксель как "подпись внутри файла" вообще средненькая из-за изменения формата ЭП в выпусках Офиса, например, версия 2010 не опознает ЭП сделанные в 2003 версии и рапортует об нарушении подписи хотя все ОК.

Помимо SignedData для CADES, в плагине имеются классы для XMLDSIG подписания и для получения RAWSignature. Проблема в том, что эти классы не специализированы именно под Эксель и PDF, то есть сначала выделить подписываемую часть файла, накидать начально структуру подписи, потом подписать, потом все это вставить в файл в нужное место. В случае видимой подписи также следует учесть, что мало просто нарисовать картинку "Файл подписан ЭП" и включить картинку в подписанное. Если используются специальные объекты для видимой подписи в Экселе, то картинка... перестает отображаться при нарушении подписи. Особого внимания также требует подписание двумя и более подписантами - нужно добавить новые видимые подписи, не нарушив предыдущие. То есть в идеале добавить все картинки, потом подписать одно и то же всеми подписантами, однако не всегда возможно заранее узнать кто будет подписывать документ, так что проблема становится нетривиальной. Решения «КриптоПро Office Signature» и «КриптоПро PDF» как раз автоматизируют эту часть работы. С другой стороны, срастить WEB-приложение с КриптоПро PDF тоже головная боль. Даже если установить его на сервере, то как он получит доступ к ключам придется подумать. В принципе Вы конечно можете сделать все формирование подписи самостоятельно.

Правда.. если придерживаться формулировок законодательства совсем уж строго, то "накидать структуру подписи" и "вставить в файл в нужное место" может быть расценено как действие, требующее контроля встраивания сертифицированных средств ЭП и соответственно без такого контроля может считаться что подпись выполнена несертифицированным средством ЭП. Обратите внимание на "может" - пока что я не слышал чтобы кого-то и вправду так расценили при всем многообразии самопальных костылей сделанных коллегами программистами прикладных ИС, но все продолжают бояться типа "когда-то бывает первый раз".

Отредактировано пользователем 19 июля 2022 г. 11:27:59(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
kassfb оставлено 20.07.2022(UTC)
Offline kassfb  
#3 Оставлено : 20 июля 2022 г. 12:14:45(UTC)
kassfb

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

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

Сказал(а) «Спасибо»: 2 раз
Благодарю за развернутый ответ и пояснения с форматами встроенных подписей.
Цитата:
Судя по описанному должна была получиться либо открепленная формата PKCS#7/CADES (если грузили на госуслуги 2 файла) либо прикрепленная такого же типа (если 1 файл). Уточню, такая прикрепленная PKCS#7/CADES подпись содержит весь исходный файл целиком, то есть "файл внутри подписи".

Все верно, пользователь может выбрать получить открепленную (два файла: .xls и .sig) или прикрепленную (один файл .sig) подпись. Но если я правильно понял, то для моих задач нужен другой формат подписи.

Проблема с желанием подписывать документ видимой подписью в том, что печать(картинка) "документ подписан ЭП", для пользователя выглядит проще и понятнее чем то, что получается сейчас - "файл внутри подписи" который можно проверить только на определенных сервисах или в приложении, где эта подпись была создана. В первом случае картинка которую увидишь сразу вызывает больше доверия. А про подлинность и юридическую сторону вопроса думать не хочется...

Поэтому требуется, чтобы было и понятно(видно штамп с картинкой), но и достоверно (все проверки подписи проходили успешно).

Причем тут вот как все оказывается...
Цитата:
Общего между этими форматами (прим. XMLDSIG/XADES и PADES) то, что в них подписывается только часть файла (с важными данными), в основном остаются неподписанными служебные данные, и сама подпись добавляется в оставшуюся неподписанной часть файла.

Очень интересует каким именно образом должна встраиваться подпись внутрь документа. И как получить подпись формата PAdES, чтобы ее можно было добавить в нужную часть документа, чтобы когда открываешь получившийся документ, проверка подлинности ЭЦП внутри документа (например с помощью "КриптоПро PDF) давала положительный результат?

Нужно распарсить неподписанный PDF (в который уже будет вставлена картинка о том что он подписан ЭП) таким образом, чтобы выделить ту часть информации(байт), которая подписывается подписью формата PADES? Допустим, я даже подпишу эту прелестьShame on you и в итоге я должен буду в уже "распаршенненном" документе найти место куда вставить полученную подпись? После чего еще конвертировать получившееся обратно в PDF, чтобы подпись не "слетела" и в результате отрылся документ с штампом и подпись внутри была верна?

Спасибо что сообщили, что возможен вариант с несколькими подписантами и как тогда быть с штампами))
Цитата:
то есть сначала выделить подписываемую часть файла, накидать начально структуру подписи, потом подписать, потом все это вставить в файл в нужное место.

Если я правильно понимаю, то чтобы мне в итоге получить PDF с видимой подписью (а если один документ будет подписывать >1 человек то...). Мне сначала нужно "вставить" в неподписанный PDF все картинки с ФИО и Датами и Временем тех, кто будет подписывать документ, но заранее я это никак не узнаю Think
Ну ладно, этот случай лучше рассматривать отдельно, а сперва хочу понять как получить подпись в нужном формате, чтобы встроить эту подпись в документ? d'oh!
Собственно то, что выделено жирным шрифтом для меня сейчас главная загадка. Объясните, пожалуйста, если с подобным сталкивались Pray

Отредактировано пользователем 20 июля 2022 г. 13:22:20(UTC)  | Причина: Не указана

Offline two_oceans  
#4 Оставлено : 21 июля 2022 г. 6:52:29(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 397 раз в 367 постах
Добрый день.
О да, похоже Вы все осознали. Впрочем, как говорится "глаза боятся, а руки делают".
Конкретно с задачей подписи PDF в мельчайших деталях я не сталкивался, но на форуме была похожая тема, где нужно было из php подписать PDF файл. Насколько я понял, там (то есть в PHP) уже есть библиотека разбора PDF и через itext можно получить как раз подходящий для подписания кусочек документа. Подходит как я понял не идеально, но для одной подписи сойдет. Для нескольких скорее всего потребуется "более сильное колдунство", то есть более тонкая работа со структурой PDF документа. Далее с этим кусочком что-то делали при помощи phpcades (который по функционалу чуть уже чем собственно плагин, но основные классы и операции те же. Уже, например, в том плане, что подписывается только хэш, напрямую данные подписать нельзя, сначала считается хэш, потом хэш подписывается). PDF в своей основе скорее текстовый формат (серьезно, я для теста в блокноте набирал маленькую PDF без внедрения кириллических шрифтов - достаточно небольшой таблицы подстановок, чтобы кириллица отобразилась), так что какие-то тексты склеили и вышла PADES. Функционала плагина технически должно хватать. В общем, если есть эталонный тестовый документ PDF, подписанный PADES, разобраться думаю будет не так уж сложно. Как вариант, наверняка есть доки и спецификации от Adobe.

По поводу нескольких подписей насколько понимаю, там возникает вопрос "шашечки или ехать" даже в некоторых случаях с КриптоПро PDF, то есть нужно выбрать несколько не-"видимых" подписей или одна "видимая". Хотя вообще в теории возможно подписание несколькими подписантами с "видимыми" подписями, но я уже говорил что это нетривиальная задача. Смысл возможности в чем: PDF внутри себя помимо основной структуры страниц, команд и т.д. может содержать "этажерку" исправлений, то есть при редактировании в теории можно добавить в конец еще что-то не меняя основную структуру документа и средство просмотра будет показывать как основную часть, так и "добавку". То есть в теории можно дорисовать картинку еще одной видимой подписи, не затронув подписанное первой подписью, а потом еще и подписать все вместе. Посмотрим, спасет ли это нас?

В случае если все картинки такие дорисованные после основной части, а только основная часть подписана, то с невидимой подписью все ОК. Вот только это на корню убивает саму идею "видимой" подписи, так как картинки легко можно заменить если они не входят в подписанную часть.

В случае если все картинки заранее добавлены в основную часть, то это тоже немного неправильно - а что если кто-то один откажется подписывать? Картинка будет дезинформировать, что он подписал, а на самом деле не подписывал, тоже нехорошо.

В случае если каждая новая подпись включает основную часть, предыдущие дорисованные картинки, новую картинку - потребуется реально сложная работа по позиционированию всех частей "мозаики". Также остается вопрос про средство просмотра - поймет оно, что какие-то картинки добавлены как часть подписи или будет орать что часть документа неподписана всем подписантами.

Все это и принуждает к выбору одна видимая или несколько невидимых. Несколько видимых если и есть получается просто для виду, реальной сути не несут.

Отредактировано пользователем 21 июля 2022 г. 6:59:48(UTC)  | Причина: Не указана

Offline Андрей *  
#5 Оставлено : 21 июля 2022 г. 10:38:24(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Автор: two_oceans Перейти к цитате

Все это и принуждает к выбору одна видимая или несколько невидимых. Несколько видимых если и есть получается просто для виду, реальной сути не несут.


Зачем заранее добавлять "подписантов", если необходимо открывать в режиме обновления (или написанное выше привязано к конкретной библиотеке, не позволяющей потом добавлять визуальную подпись?), чтобы оставить действительными ранее добавленные? Или не так понял...


Пример нескольких визуальных подписей, без "заранее добавить" их добавить в PDF:

Snimok ehkrana ot 2022-07-21 11-37-17.png (52kb) загружен 18 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
Offline kassfb  
#6 Оставлено : 21 июля 2022 г. 17:42:12(UTC)
kassfb

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

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

Сказал(а) «Спасибо»: 2 раз
На самом деле, начитавшись всего и где только можно, у меня в голове сложилось два варианта как это может выглядеть, чтобы обеспечить функциональность которую требуется...(если в чем-то ошибаюсь, критика приветствуется)

Первый: "На коленке". Пытаться самому "встроить" подпись полученную плагином в документ. И здесь много тонких моментов, которые я могу только догадываться как можно сделать.
Например, чтобы только подписать PDF документ как мне требуется, нужно распарсить неподписанный документ и выделить нужную часть, которая "важная" и содержит информацию записанную в документ, подписать эту часть плагином (открепленной PKCS#7/CADES т.е. Хеш-этой "важной" части), а дальшеThink на сервере вставить полученную подпись (т.к. это строка) в соответствующее место для подписи. Соберется ли это все у меня и заработает как надо - надо пробовать. Видел на хабре, что у людей получалось. Вопрос времени.
Не совсем разобрался с картинками, т.е. видимой частью подписи. Андрей написал, что в уже подписанный документ можно добавить вторую подпись, чтобы первая не слетала. Как я понял, это вы делаете с помощью КриптоПро PDF, а мне нужно реализовать это в браузере, т.е. добавление штампов должно происходить на сервере, чтобы предыдущие подписи оставались валидными.
И про валидацию отдельная тема. Сервер должен прежде чем сохранить документ в БД, проверить подписи в нем на действительность. Видел статью на эту тему от того же автора, что писал про добавление подписи.
В таком случае нужно приобретать серверную лицензию КриптоПро CSP и, возможно, что-то еще для проверки подписей (КриптоПро .NET, КриптоПро TSP/КриптоПро OCSP?)

Второй: "Дорохо бохато". Покупать "КриптоПро DSS Lite" (именно lite, т.к. как я понял эта версия в качестве криптопровайдера использует ПО установленное на ПК пользователя, что позволяет использовать usb-Token и Смарт-Карты для подписи, а планируется хранить закрытые ключи локально) для создания встроенных подписей в документы. А для проверки действительности подписи "КриптоПро SVS". Разворачивать это все на сервере и внедрять в наше web приложение.

Что из этого выбратьd'oh! предстоит решать. Если знаете какие еще могут быть варианты, буду благодарен, если поделитесьPray
Offline Андрей *  
#7 Оставлено : 21 июля 2022 г. 18:27:55(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Автор: kassfb Перейти к цитате
Н
Не совсем разобрался с картинками, т.е. видимой частью подписи. Андрей написал, что в уже подписанный документ можно добавить вторую подпись, чтобы первая не слетала. Как я понял, это вы делаете с помощью КриптоПро PDF, а мне нужно реализовать это в браузере, т.е. добавление штампов должно происходить на сервере, чтобы предыдущие подписи оставались валидными.


Нет,
это не через КриптоПРО PDF и да, всё можно сделать через плагин + сервер (отдаёт нужное\собирает PDF, вставив подписи)

Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#8 Отправлено: : 25 июля 2022 г. 8:05:18(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 397 раз в 367 постах
Автор: Андрей * Перейти к цитате
Зачем заранее добавлять "подписантов", если необходимо открывать в режиме обновления (или написанное выше привязано к конкретной библиотеке, не позволяющей потом добавлять визуальную подпись?), чтобы оставить действительными ранее добавленные? Или не так понял...
Там просто перебор вариантов, один из них добавлять заранее и почему это не правильно; следующий абзац - следующий вариант как раз про открытие в режиме обновления. Там речь про то, что так правильно, но PDF спецификации тоже бывают разных версий, нет никакой гарантии, что конкретное случайно выбранное средство просмотра PDF будет принимать такую этажерку исправлений. Со стандартными средствами можно посмотреть в соседнем разделе форума - нужна строго определенная версия определенной разрядности со строго определенным порядком установки.
Видимая подпись ЭП это конечно удобно (не нужно искать как расшифровываются инициалы подписавшего - легко подготавливать ответ на официальное письмо), но имеет какой-то серьезный смысл только если документ хранится в доверенной системе документооборота. Тогда можно не вдаваясь в подробности "невидимой" ЭП просто поверить картинке. Во всех остальных случаях гораздо проще приложить к PDF отсоединенную ЭП CADES чем заморочиться с форматом PADES и подбором средств просмотра, которые его понимают. Понимаю, если бы в печатном виде были указаны хэш документа и алгоритм хэша, а так на бумаге это становится просто картинка.

Отредактировано пользователем 25 июля 2022 г. 8:08:04(UTC)  | Причина: Не указана

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