Comments 8
Присоединенной подписью сложнее. Потому что по требованиям подписана должна быть уже версия с внедрённым штампом.
И зависимость от ларки тут совсем лишняя
Подпись может быть как отсоединённой, так и присоединённой — обе реализуются с помощью CryptoProBuilder, достаточно изменить параметры. Визуализация всегда должна выполняться до подписания, независимо от типа подписи. В противном случае содержимое документа изменится после подписания, что нарушит контроль целостности и приведёт к ошибке верификации.
Что касается Laravel — он здесь не обязателен. В статье просто использован как знакомый фреймворк для демонстрации. Все примеры легко адаптируются под любой фреймворк: Symfony, Yii и т.д., поскольку CryptoProBuilder это обычная обёртка над cli инструментами, без жёстких зависимостей от фреймворка.
На заглавной картинке КДПВ, в штампе подписи, указаны странные сроки. Дата окончания меньше даты начала действия. Там данные совсем с потолка, или где-то в коде есть ошибка?
Понимаю, что цель статьи лишь демонстрация, но в реальности люди еще столкнутся с проблемой, что mpdf не умеет работать с pdf-файлами версии выше 1.4
Только что проверил на PDF 1.7 (Acrobat 8) - все отлично работает. Более того, можно добавить сервис предварительной конвертации в pdf и принимать на вход любые другие форматы - docx, xlsx, html, jpg, png и другие. Можно добавить расширение для php, можно прямо через exec() с PhpFluentConsole (автоматически устанавливается с CryptoProBuilder), можно поднять отдельный сервис на любом другом языке с доступом по api или через очереди. Также если вы используете машиночитаемые форматы (например xml или json), можно добавить шаблоны, что бы генерировать pdf на их основе. Так системы ЭДО делают - хрянят xml и sig , а при необходимости pdf генерируют.
Если есть PDF и XML, то какой из этих файлов нужно подписать?
Зависит от контекста.
Пример 1:
В системах эдо документы часто хранятся в xml формате с отсоединенной подписью, pdf с визуализацией формируется по желанию но электронной подписью не подписывается, т.е. он является частью пакета, но не является самостоятельным документом. При желании, можно удалить pdf документы, что бы меньше платить за место на диске, при скачивании документа можно запросить заново сформировать pdf. Юридическую значимость в данном случае имеет xml документ и sig файл с подписью.
Пример 2:
Вы генерируете обынчые PDF документы, которые планируете передавать в какие-либо государственные органы - в данном случае на pdf документ ставится визуализация и документ подписывается электронной подписью. Визуализация это просто картинка, которая сама по себе не имеет юридической значимости, но когда вы сформировали документ и после этого подписали хэш этого документа, то все содержимое становится юридически значимым, включая визуализацию. Но только при условии, что целостность документа не будет нарушена и будет проверена электронная подпись.
Пример 3:
В некоторых государственных учреждениях подписывается архив с данными. Например, медицинские счета. То есть вы берете кучу различных документов, упаковываете в архив, шифруете, если необходимо и архив подписываете электронной подписью.
Все зависит от того, для чего вы собираетесь подписывать документы. Нужно изучить требования принимающей стороны и исходить из этого.
Laravel: электронная подпись на сервере с PDF визуализацией