Подписание PDF - несколько подписей с одной ревизией - PullRequest
2 голосов
/ 27 ноября 2009

Проще говоря - я хочу добавить несколько подписей в PDF (используя iText), без добавления новой ревизии для каждой.

Я прочитал следующую ветку , и это имеет большой смысл (поскольку Бруно написал ответ)

Очевидно, что если документ имеет 2 ревизии, первая подпись не покрывает вторую ревизию. Однако возможно ли (согласно стандарту PDF и в iText) иметь две подписи для одной и той же ревизии? (Я установил уровень сертификации CERTIFIED_FORM_FILLING_AND_ANNOTATIONS).

Дело в том, что документ создается один раз и не изменяется вообще, за исключением добавления подписей. А поскольку подписанные PDF-файлы будут отправлены нетехническим специалистам, просмотр «документа был изменен» может вызвать некоторое «недоверие» (из-за недостатка знаний о PDF, чего, увы, я не могу ожидать от них) , Итак, еще раз - можно иметь 2 подписи в 1 ревизии, добавленные в разное время разными людьми.

1 Ответ

1 голос
/ 03 декабря 2009

Я получил полезный ответ в списке рассылки iText, которым я собираюсь поделиться. Здесь , парень по прозвищу mkl объясняет, что с продуктами Adobe это сводится к проблеме курицы и яйца.

ISO 32000-1: 2008, раздел 12.8.1 гласит: «Дайджест диапазона байтов должен быть вычислен для диапазона байтов в файле, который должен указываться записью ByteRange в словаре сигнатур. Этот диапазон должен быть весь файл, включая словарь сигнатур, но исключая само значение сигнатуры (запись Contents). Могут использоваться другие диапазоны, но поскольку они не проверяют все изменения документа, их использование не рекомендуется. Когда дайджест диапазона байтов В настоящее время все значения в словаре сигнатур должны быть прямыми объектами. "

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

НО ...

если вы хотите, чтобы продукты Adobe принимали ваши подписи «из коробки», вы обнаружите, что они ожидают, что подпись подпишет все в своей редакции, кроме самой себя. Для двух подписей это будет означать, что каждая подпись должна подписывать диапазон, который включает друг друга, проблему курицы или яйца.

Если ваши подписи должны проверяться только с помощью вашего собственного программного обеспечения и продукты Adobe могут пометить ваши подписи как недействительные, то вы можете легко создать такие независимые двойные подписи. Ср

http://old.nabble.com/Uncommon-ByteRange-entry-in-signature-dictionary-to23670277.html

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

«Adobe Acrobat и Reader НЕМЕДЛЕННО аннулируют ByteRange, состоящий более чем из 2 пар. Поэтому все, что имеет несколько диапазонов, не будет проверено».

В качестве третьего способа вы можете создать собственный плагин Adobe, который проверяет ваши собственные подписи.


всего лишь одна запоздалая мысль ... если вы серьезно хотите заниматься подписью, вам следует помнить не только текущий простой формат PDF (т. Е. ISO-32000-1: 2008), но и дополнительные стандарты.

Например, присвоить ETSI TS 102 778-1; раздел 4.1 в v1.1.1 гласит: «Как и в других реализациях сигнатур на основе CMS, дайджест вычисляется по диапазону байтов файла. Однако в PDF, поскольку информация о сигнатуре должна быть встроена в сам документ, этот диапазон является целым файлом, включая словарь подписи, но исключая саму подпись PDF. Диапазон затем указывается записью ByteRange словаря подписи.

Ограничивая таким образом запись ByteRange, он гарантирует, что в PDF нет байтов, не охватываемых дайджестом, кроме самой подписи PDF.

ПРИМЕЧАНИЕ. Профили, определенные в частях 2 и 3, соответствуют данному требованию, что является рекомендацией в ISO 32000-1 [1], пункт 12.8.1. "

Следовательно, как только вы серьезно относитесь к подписи, диапазон подписанных байтов просто должен охватывать всю ревизию, кроме одного контейнера подписи, который подписывает этот самый диапазон байтов.

(Из списка рассылки iText, 1 декабря 2009 г.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...