В этой статье я хочу поговорить о следующих вещах:
преимущества формата PDF как документа с электронной подписью; Платформа Java, библиотека itextpdf и СКЗИ КриптоПро CSP в качестве средств подписи; о трудностях, с которыми нам пришлось столкнуться, о доработке itextpdf; привести пример кода, выполняющего несколько подписей; поговорим о целесообразности использования формата PDF в качестве документа с подписью.В современном информационном мире важность электронной подписи и основных услуг, которые она предоставляет (сохранность данных и неотказ от авторства), сложно переоценить.
Государственные органы, физические и юридические лица широко используют электронные подписи в потоках обмена информацией между собой.
Согласно закону, электронная подпись может придавать документам юридическую силу, равную по значимости бумажному носителю, подписанному собственноручной подписью и скрепленному печатью уполномоченного лица.
Преимущества PDF
В качестве контейнера для хранения разнообразной информации в удобном для человека формате формат PDF по праву завоевал свою популярность.Его можно открыть в любой ОС.
PDF-документ может содержать не только текстовые и табличные данные, но также аудио- и видеозаписи, инженерную графику и трехмерные модели.
Для дополнительной обработки PDF-документов в этом формате предусмотрен такой мощный инструмент, как поддержка JavaScript для изменения содержимого форм и полей при возникновении события или действия пользователя.
Инструменты Adobe Systems (разработчика формата PDF) поддерживают использование электронных подписей.
В отличие от сообщений с прикрепленной стойкой электронной подписью стандарта PKCS#7 и его расширения CAdES, для просмотра PDF-документа с подписью не требуется никакого дополнительного специального программного обеспечения.
За исключением поставщика шифрования, который необходим во всех случаях.
Те.
Инструменты Adobe позволяют визуализировать электронную подпись в документе.
При подписании PDF-документа вы можете задать параметры визуализации, указать номер страницы, размер блока с подписью, название поля, где ее разместить, добавить графическое изображение, например, логотип компании, скан.
собственноручной подписи руководителя и печати организации.
При просмотре таких документов, помимо визуализации в теле документа, Acrobat и Adobe Reader отображают вкладку «Подписи» с сопутствующей информацией: значком, показывающим статус проверки подписи, информацию о том, был ли документ изменен, результат проверки.
проверка сертификата открытого ключа, время последней проверки, страница и поле, содержащие электронную подпись.
Инструменты для подписи
Используемая версия Java: «1.8.0_111» HotSpot(TM) 64-разрядная серверная виртуальная машина (сборка 25.111-b14).В качестве сертифицированного средства защиты информации от лицензированного разработчика мы используем криптопровайдер КриптоПро CSP v4.0 и КриптоПро JCP – v.2.0, с установкой модуля КриптоПро Java CSP v.4.0. Почему КриптоПро JCP – v.2.0, с модулем КриптоПро Java CSP v.4.0? Потому что провайдер КриптоПро JCP после длительного безсертификационного периода получил сертификат соответствия от регулятора до 31 декабря 2018 года, а затем, по информации разработчика, снова может возникнуть неопределенность с сертификацией.
Модуль КриптоПро Java CSP v.4.0 не выполняет криптографические преобразования и по сути является API к провайдеру КриптоПро CSP, к очередной сертификации которого вопросов нет. Здесь нужно сказать, что действующий сертификат СКЗИ не требуется при условии использования криптопровайдера исключительно для внутренних целей.
Согласно спецификации Java Cryptography Architecture (JCA), в своем приложении я указываю и использую функции поставщика криптографии: JCSP. После установки КриптоПро этот провайдер отображается в списке всех доступных в файле .
/java/jdk1.8.x_xxx/jre/lib/security/java.security, где можно настроить, какой из них предпочтительнее использовать по умолчанию, если это явно не указано в заявке:
Не забывайте, что экспортные ограничения платформы Java, которые блокируют работу криптопровайдеров с российскими алгоритмами шифрования, должны быть сняты.# # List of providers and their preference orders (see above): # security.provider.1=ru.CryptoPro.JCSP.JCSP
Для этого вам необходимо заменить файлы в .
/java/jdk1.8.x_xxx/jre/lib/security. local_policy.jar И US_export_policy.jar тем, которые представлены по адресу:
Расширение криптографии Java (JCE) Файлы политики юрисдикции неограниченной силы 8 Скачать и содержащийся в default_local.policy И default_US_export.policy : grant {
// There is no restriction to any algorithms.
permission javax.crypto.CryptoAllPermission;
};
Использование библиотеки iText itextpdf.com для работы с PDF-документами на Java было продиктовано провайдером КриптоПро.
КриптоПро JCP включает файл исправления Git для библиотеки iTextpdf версии 5.1.3 —
jcp-2.0.xxxxxx\Doc\itextpdf\ itextpdf_5.1.3.gost.user.patch
Патч адаптирует itextpdf для работы с провайдером КриптоПро.
Вам необходимо скачать исходный код библиотеки версии 5.1.3, затем использовать командную строку Bash системы контроля версий Git для применения патча: git apply --stat itextpdf_5.1.3.gost.user.patch
Далее вам необходимо собрать полученную библиотеку из обновлённого исходного кода и подключить её к приложению.
В рамках КриптоПро JCP вы можете найти множество примеров в файле образцы-sources.jar .
В частности, есть примеры подписания и проверки PDF-документов.
(\PDF\SignVerifyPDFExample.java).
Проблемы и трудности сборки
После успешного обновления исходного кода itextpdf в нем появляются зависимости для пакетов ru.CryptoPro.JCP и ru.CryptoPro.reprov.x509. Без них проект с исходным кодом itextpdf_5.1.3.gost не будет собран.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project itextpdf: Compilation failure: Compilation failure:
[ERROR] \github\iTextpdf_5.1.3_patched_cryptopro_bc1.50\src\main\java\com\itextpdf\text\pdf\PdfPKCS7.java:[138,23] error: package ru.CryptoPro.JCP does not exist
[ERROR] \github\iTextpdf_5.1.3_patched_cryptopro_bc1.50\src\main\java\com\itextpdf\text\pdf\PdfPKCS7.java:[139,31] error: package ru.CryptoPro.reprov.x509 does not exist
Вам необходимо взять файлы JCP.jar и JCPRevTools.jar из дистрибутива КриптоПро 2.0 и поместить их в каталог JRE, который использует Maven: Java\jdk1.8.0_111\jre\lib\ext. Конечно, они также должны быть в classPath приложения.
Итак, библиотека собрана, давайте подключим ее к приложению.
И здесь возникает основная проблема.
iTextpdf_5.1.3 содержит зависимость от Bouncy Castle версии 1.46, библиотеки с открытым исходным кодом, которая реализует поставщика шифрования и поддерживает структуры ASN.1. <dependency>
Теги: #java #pdf #электронная подпись #криптопро #криптопровайдер #Криптография #PKI #цифровая подпись #информационная безопасность #цифровая безопасность #цифровая безопасность #открытый ключ #инфраструктура открытых ключей #Синтаксис криптографического сообщения #CAdES #pkcs7 #информационная безопасность #Криптография # Java #pdf
-
Обзор Sony Vaio Vpc-E Серии C3L1E/Wi
19 Oct, 24 -
Что Такое Pat-Тестирование?
19 Oct, 24 -
Роснано И Сколково Могут Закрыться
19 Oct, 24 -
«Мегафон» Наносит Превентивный Удар По Tele2
19 Oct, 24