dadv: (chuck)

Поискал как-то утилитку, которая смогла бы в пакетном режиме подписывать заранее заданный PDF заранее заданным сертификатом/ключом формата PKCS#12, в которых используются не варианты RSA/DSA, а отечественный ГОСТ, с внедрением подписи в PDF. И среди опенсорса ничего рабочего не нашел. Отсоединенную подпись (в отдельном от PDF файле) создать проблем нет просто командой openssl, но вопрос стоял о внедренной в PDF подписи.

Под Windows есть Adobe Acrobat и КриптоПро, при помощи которых можно проверять существующую подпись в файле PDF и подписывать самостоятельно при наличии ЭЦП, но мне хотелось найти путь с использованием открытого софта и автоматически, в пакетном, а не ручном режиме.

Нашелся BouncyCastle - опенсорс-криптопровайдер для Java, который с версии 1.50 умеет ГОСТ. Нашлась Java-библиотека iText PDF для манипуляций с файлами PDF, которая умеет создавать подписанные PDF и поддерживает использование криптопровайдера BouncyCastle вместо дефолтного Sun-овского, который ГОСТ не умеет.

И нашелся баг в исходниках iText всех версий, включая последние 5.5.9 и 7.0.0, из-за которого при подписывании PDF ГОСТ-ключом никаких ошибок не возвращается и генерируется PDF cо встроенной подписью, но битым хешем, отчего проверка подписи потом говорит "документ был изменён после подписывания". Участок кода itextpdf в 5.5.9 и 7.0.0, в котором сидит баг, практически идентичен, не менялся при смене версии.

После исправления бага (на самом деле полное исправление неизбежно сломало бы совместимость со старым кодом, так что в API добавлен новый метод для обходного пути) и добавления OID-ов для GOST3410 и ECGOST3410 в itextpdf у меня заработало пакетное подписывание PDF. Результат проходит проверку подписи в виндовом Adobe Acrobat с аддоном от КриптоПро, добавляющим Акробату поддержку ГОСТ.

Для этого требуется JRE или JDK с Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files (тестировал с OpenJDK 1.6 и 1.7), BouncyCastle версии не ниже 1.50 (тестировал с 1.54), itextpdf-5.5.9.jar (патченный для поддержки ГОСТ) или новее.

И коротенькое консольное java-приложение (просто обвязка вокруг библиотек), которое можно взять тут: http://www.grosbein.net/signpdf/

Там же лежит описание использования в http://www.grosbein.net/signpdf/Readme.txt плюс готовый патченный itextpdf-5.5.9.jar, сами патчи и прочее.

Profile

dadv: (Default)
Choose your future

June 2017

M T W T F S S
   1234
56 7891011
12131415161718
19202122232425
2627282930  

Syndicate

RSS Atom

Tags

Style Credit

Powered by Dreamwidth Studios