iTextSharp не отображает цифровую подпись - PullRequest
0 голосов
/ 11 июля 2020

Я прочитал электронный текст цифровой подписи I-TEXT, а также предыдущие сообщения, на которые ответил MKL (который, кажется, является авторитетом вместе с Бруно в этом топе c). у вас есть служба приложений Azure, которая получает цифровую подпись (base 64) и цепочку сертификатов из API подписи компании. API подписи компании возвращает подпись в Base64 вместе с цепочкой сертификатов.

Я просто хочу вставить объект / контейнер подписи в pdf, чтобы он отображался на панели подписи, когда конечный пользователь открывает pdf. Я предпочитаю использовать отложенное подписание. * API компании возвращает "простую" подпись, в чем я почти уверен, а также возвращает цепочку из трех строковых сертификатов.

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

Единственная разница между моим кодом и кодом в примере - это вместо byte [] certificateBytes = THE_RETRIEVED_CERTIFICATE_BYTES; X509Certificate x509Certificate = новый X509CertificateParser (). ReadCertificate (certificateBytes); Я создаю 3 сертификата x509Certificates (по одному для каждой строки в цепочке, возвращаемой API компании.

К сожалению, все не работает, я получаю эти ошибки в Acrobat: подпись недействительна, есть ошибки в форматировании или информации, содержащейся в эта подпись, идентичность подписи еще не проверена, время подписи определяется по часам на компьютере подписывающей стороны ... также, если я нажимаю "Сведения о сертификате" чуть ниже этой ошибки в Acrobat, она пуста. Это были почти те ошибки, которые я получал при попытке использовать «пример clientserversigning»

я очень стараюсь и задаюсь вопросом, что это может быть ... попробовать изменить расчетный размер с 12000 и увеличить его? или ошибки, которые я получаю в Acrobat, возможно, они намекают, что цепочка сертификатов из API компании не улавливается кодом построения отложенного контейнера подписи ... Я борюсь, но любые советы были бы очень признательны

Evan

Чтобы прояснить, я следую примеру clientserversigning из главы 4, но после воссоздания моего PDF-файла с подписью из API компании я получаю следующее:

полученный PDF-файл неправильно подписан

Его поговорка 1) есть ошибки в форматировании информации 2) личность подписавшего не проверена 3) время подписи определяется по часам на компьютере подписавшего

теперь до "подготовки" "PDF-файл перед хешированием для отправки на подпись ... Я не вижу в примере ClientSigning ничего, что специально его готовит, могу ли я предположить, что библиотека IText готовит его под капотом?

1 Ответ

0 голосов
/ 14 июля 2020

В вашем вопросе и в комментариях к нему вас особенно интересует

  • , можно ли использовать API подписи, который возвращает сертификаты только вместе с подписью, и
  • когда следует отложить подписание.

Можете ли вы использовать API подписи, который предоставляет сертификат пользователя только после подписания

Чтобы ответить на этот вопрос, сначала необходимо уточнить, какой подписей, создаваемых соответствующим API подписи, простые значения подписи (например, подписи PKCS # 1 RSA) или полноценные контейнеры подписи CMS.

Если он создает полнофункциональные контейнеры подписи CMS, вы можете создавать подписи после произвольного профили подписи, если контейнеры подписи соответствуют требованиям к ним (что они часто делают). Единственное ограничение, которое у вас есть, это то, что вы не можете иметь информацию из сертификата подписавшего в визуализации подписи, потому что эта визуализация определена в подписанных данных PDF.

Если он создает только простые значения подписи, лучшее, что вы можете do - это создание и встраивание простых контейнеров CMS, которые не содержат указателей на сертификат подписавшего в подписанных атрибутах (если у них есть какие-либо подписанные атрибуты для начала). Многие политики подписи, представляющие интерес, требуют таких указателей, но, по крайней мере, Adobe Reader принимает подписи без них.

Если вы находитесь в этой ситуации и хотите попробовать создать подписи с такими простыми контейнерами подписей, вы можете использовать код от этот ответ , раздел «Как создать подпись PDF без предварительного знания подписывающего сертификата».

Когда использовать отложенную подпись

Разница между отложенным подпись и другие вызовы подписи iText - это не , для отложенной подписи требуется меньше информации (по сравнению с подписанием внешнего контейнера ).

В отличие от других методов подписи iText , signDeferred повторно использует самое внешнее существующее заполненное поле подписи PDF-файла для подписи и просто заменяет контейнер подписи в нем.

Имя метода получено из наиболее распространенного варианта использования он используется для:

  • На первом этапе поле подписи (возможно, сначала создается d, а затем), заполненный с использованием signExternalContainer с реализацией IExternalSignatureContainer, которая вычисляет документ ha sh, который нужно подписать, но еще не возвращает окончательный контейнер CMS, а просто некоторый (обычно) пустой массив. Сгенерированный PDF-файл с заполненным полем подписи (хотя и без окончательного контейнера подписи) затем временно сохраняется (в файловой системе или базе данных).
  • На втором этапе контейнер подписи для определенного документа ha sh запрашивается и (вероятно, асинхронно) ожидается.
  • На последнем этапе signDeferred используется для вставки полученного контейнера подписи в PDF-файл, подготовленный на первом этапе.

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

...