dadv: (chuck)
[personal profile] dadv

Поискал как-то утилитку, которая смогла бы в пакетном режиме подписывать заранее заданный 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, сами патчи и прочее.

Date: 2016-08-13 10:57 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
1) урлы битые
2) не ясно откуда брать всякое говно

Date: 2016-08-13 11:02 (UTC)
From: [identity profile] dadv.livejournal.com
Урлы уже успел поправить. Всё что нужно лежит по урлу плюс можно нагуглить плюс java/bouncycastle15 есть в портах. Патчи для itextpdf ещё не пропихнуты в апстрим, так что проще всего взять готовый пересобранный jar по урлу.

Добавил ссылок на BC и itextpdf.
Edited Date: 2016-08-13 11:38 (UTC)

Date: 2016-08-13 11:44 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
ну и наверное стоит более ясно написать, что JCE отдельно искать не надо

Date: 2016-08-13 11:54 (UTC)
From: [identity profile] dadv.livejournal.com
У меня в качестве тестера был один юзер бинарного дистрибутива Linux, у него стоял пакет Sun JRE 1.8 без JCE Unlimited Strength и PKCS#12 с ГОСТ не парсился библиотечками.

Date: 2016-08-13 12:14 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
тогда наоборот, надо указать куда входит, куда не входит и где брать.
особенно для тех, к то в жабе ни бум-бум
на гугл сейчас пологаться сложно, может спамом вообще все забить

Date: 2016-08-13 12:21 (UTC)
From: [identity profile] dadv.livejournal.com
Могу рассказывать только о том, что знаю. А куда оно не входит и где юзерам такого брать эти файлы, сказать не могу. Ну разве что послать в гнездо самой Java, оно там точно есть, но зависит от операционки вроде бы.

Date: 2016-09-15 02:18 (UTC)
From: [identity profile] fuflolog.livejournal.com
Россиянин должен страдать.

Date: 2016-09-15 03:12 (UTC)
From: [identity profile] dadv.livejournal.com
Все без исключения? Сметанин тоже, или он в контексте http://leonid-smetanin.livejournal.com/112024.html уже не россиянин шесть лет? Но паспорт-то у него ещё несколько лет будет российский.
Edited Date: 2016-09-15 03:14 (UTC)

Date: 2016-09-15 14:37 (UTC)
From: [identity profile] fuflolog.livejournal.com
Да, все без исключения. Нет, Сметанин выздоравливающий.

Profile

dadv: (Default)
Choose your future

June 2017

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

Tags

Style Credit

Powered by Dreamwidth Studios