Добавление цифровой подписи в PDF с использованием Java
Я хочу подписать цифровой файл PDF с помощью сертификата, хранящегося на USB-токене, HSM и т. Д. Как использовать закрытый ключ, сохраненный на USB-токене, с помощью JAVA?
3 ответа
К самореференции iText добавлю
- Gnostice
- DigiSigner
- Apache PDFBox (с открытым исходным кодом)
- Java4Less (с открытым исходным кодом, на основе PDFBox)
- Adobe LiveCycle
- jPDFSecure
- Oracle Fusion
Шаги, связанные с добавлением цифровой подписи в файл PDF:
(I) Создать шаблон PDFDocument:
Создать PDFDocument с подписью шаблона:
PDSignature pdSignature;
pdSignature.setByteRange(new int[]{0, 0, 0, 0});
pdSignature.setContents(new byte[n*1024]);
где n - целое число, то есть кратное kbs.
Примечание. Размер содержимого должен быть больше или равен сумме длины файла подписи и сертификата.
(II) Обновление шаблона PDF документа:
(a) Обновить / ByteRange [abcd]:
(i) a = смещение% в "%PDF"(=0, по умолчанию)
(ii) b = смещение
(iii) c = Смещение> в "/ Содержание<000...000>"
(iv) d = смещение F в "%%EOF" минус c сверху
(б) обновить раздел внешних ссылок:
обновить таблицу перекрестных ссылок (раздел xref), которая указывает положение объектов и
(c) Обновить раздел startxref:
update startxref, который является смещением начала таблицы перекрестных ссылок (xref).
(III) Создание цифровой подписи обновленного типового документа:
Создание обновленного типового документа, исключая временные подписанные данные ("000... 000) из" / Contents<000...000>"
(IV) Обновление контента<> Раздел:
Замените первые / начальные "0" длины подписанных данных в "/ Содержание<000...000>" на подписанные данные (в конверте) шаблона PDFFile.
Предложения:
Использовать SignatureInterface PDFBox:
(a) реализовать SignatureInterface для метода call () (b) предоставить входные, выходные файлы, хранилище ключей, псевдоним, pin (c) сохранить сохранение
(или) использовать любую библиотеку java pdf (например, iText...)
(или) Реализуйте Шаги I-IV в Java самостоятельно.
Похоже, вы хотите цифровой подписи PDF с помощью USB-токена, смарт-карты или аппаратного модуля безопасности. Это делается с помощью PKCS#11, как описано в http://itextpdf.com/book/digitalsignatures Вы можете найти исходный код здесь. Это пример, показывающий, как подписать, используя USB-токен SafeNet iKey 400.