Как добавить LTV после того, как подписал последний подписавший? - PullRequest
0 голосов
/ 28 мая 2020

Я учусь добавлять LTV по этой ссылке

мой рабочий процесс предназначен для 2 подписывающих лиц:

подписывающего 1:

  • подготовить пустую подпись (с уровнем сертификации NO_CERTIFIED)
  • сгенерировать ha sh и получить p7s
  • вставить p7s в pdf для подписывающей стороны 1
  • addLtv для подписывающей стороны 1 ---> Я не уверен на этом этапе

подписывающее лицо 2:

  • подготовить пустую подпись из PDF-файла, уже подписанного подписывающим лицом 1 (с уровнем сертификации NO_CHANGES_ALLOWED)
  • сгенерировать ha sh и получить p7s для подписывающей стороны 2
  • вставить p7s в pdf для подписывающей стороны 2
  • addLtv для подписывающей стороны 2 ---> Я не уверен на этом этапе

в этом рабочем процессе сертификат для подписывающей стороны 2 будет недействителен, есть идеи, как добавитьLtv для этого рабочего процесса? недействителен, и я добавляю другого подписывающего (например, просто отметку времени), чтобы сделать его NO_CHANGES_ALLOWED? или есть лучший способ выполнить sh этот рабочий процесс?

enter image description here

1 Ответ

0 голосов
/ 29 мая 2020

В вашем коде есть две проблемы, из-за которых Adobe Reader правильно сообщает о проблемах. Однако я еще не уверен, будет ли Adobe Reader счастливым после их исправления.

Проблемы в вашем рабочем процессе:

  • Сертификационная подпись как вторая подпись
  • PAdES ESI C расширение объявляется только после первой подписи

Сертификационная подпись как вторая подпись

Прежде всего, ваш код применяет обычную подпись утверждения (PdfSigner.NOT_CERTIFIED установить signer.SetCertificationLevel) в качестве первой подписи, а затем сертификационной подписи (PdfSigner.CERTIFIED_NO_CHANGES_ALLOWED задано signer.SetCertificationLevel) в качестве второй.

Это не допускается. Согласно спецификации PDF ISO 32000-1:

Документ PDF может содержать [...]

не более одной сертификационной подписи (PDF 1.5). [...] Словарь подписи должен содержать справочный словарь подписи (см. Таблицу 253), который имеет метод преобразования DocMDP. [...]

Документ может содержать только одно поле подписи, которое содержит метод преобразования DocMDP; это должно быть первое подписанное поле в документе.

(разделы 12.8.1 и 12.8.2.2.1 ISO 32000-1)

И согласно ISO 32000-2:

Документ PDF может содержать следующие стандартные типы подписей: [...]

Одна или несколько подписей утверждения (также известных как подписи получателя ). Они должны следовать за сертификационной подписью, если таковая имеется.

(раздел 12.8.1 ISO 32000-2)

В любом случае подписи утверждения должны следовать сертификационной подписи, а не предшествовать ей.

(Изменение между версиями спецификации, скорее всего, было сделано для того, чтобы временные метки документа предшествовали сертификационной подписи.)

Таким образом, уже сразу после применения второй подписи Adobe Reader должен был подать жалобу!

Однако есть способ изменить уровень сертификации в более поздней подписи одобрения : Если ваш Валидатор PDF поддерживает ISO 32000-1 с Дополнением Adobe с ExtensionLevel 3 или ISO 32000-2, для этого можно использовать преобразования FieldMDP.

Прочтите этот ответ для получения некоторой информации об этой опции.

PAdES ESI C расширение объявляется только после первой подписи

Ваша первая подпись применяется с hout документ, декларирующий, что применяются любые расширения PDF. Таким образом, валидатор PDF может предположить, что для проверки подписи применяются базовые правила ISO 32000-1, в частности, что уровень сертификации «никакие изменения не разрешены» действительно означает, что нет изменения разрешены. Это правило может отличаться только в том случае, если заявлено соответствующее расширение и валидатор PDF поддерживает его. В частности,

  • ESI C уровень расширения 1 (согласно ETSI TS 102 778-4 и EN 319 142-1) или
  • ADBE уровень расширения 5 (согласно ETSI TS 102778-4) или
  • ADBE уровень расширения 8 (согласно ETSI EN 319 142-1)

должно означать, что, согласно ISO 32000-2 тем временем,

Изменения в PDF, которые являются инкрементными обновления, которые включают только данные, необходимые для добавления меток времени DSS и / или документа в документ, не должны рассматриваться как изменения в документе.

LTV добавляет код iText в ваши PDF-файлы, а затем объявляет ESI C уровень расширения 5 . Я не уверен, откуда это взялось, есть ли другой TS или EN, упоминающий этот уровень, или уровни ESI C и ADBE были перемешаны.

Таким образом, уже с вашей первой подписью вы должны объявить одно из упомянутых выше расширений.

Если document является вашим экземпляром PdfDocument до или во время применения первой подписи (вам, возможно, придется получить его из вашего PdfSigner signer используя signer.GetDocument()), вы можете объявить расширение следующим образом:

PdfDeveloperExtension extension = new iText.Kernel.Pdf.PdfDeveloperExtension
        (PdfName.ESIC, PdfName.Pdf_Version_1_7, 1);
document.GetCatalog().AddDeveloperExtension(extension);

В качестве альтернативы вы должны установить версию PDF 2.0 при подписании. Однако это может вызвать другие проблемы.

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