Я пишу небольшую библиотеку, которая должна быть библиотекой высокого уровня (простой в использовании) для цифровой подписи PDF-файлов, созданных с помощью библиотеки WeasyPrint (https://github.com/Kozea/WeasyPrint).
Я уже наладил работу с самозаверяющими сертификатами, и теперь я работаю над адаптером для цифровых подписей из API Globalsign DSS (https://www.globalsign.com/en/resources/apis/api-documentation/digital-signing-service-api -documentation.html)
У меня все работает, кроме LTV (долгосрочной проверки), для которой требуется словарь DSS со списком информации OCSP и любых сертификатов в цепочке (чтобы справиться с отзывом).
Когда я добавляю DSS, который должен прийти после того, как данные подписи были записаны, я получаю сообщение об ошибке в Adobe Acrobat о том, что диапазон байтов подписи недействителен.
Как мне включить функцию DSS, не аннулируя диапазон байтов?
Я несколько интенсивно изучал библиотеку iText, но она настолько абстрактна, что трудно разобрать фактически записываемые данные. Я все же позволил себе пометить iText, потому что это своего рода отраслевой стандарт работы с цифровыми подписями в PDF-файлах.
1 ответ
Я понял это благодаря этому красиво названному документу: электронные подписи и инфраструктуры (ESI); Расширенные профили электронной подписи в формате PDF; Часть 4. Долгосрочная перспектива PAdES – профиль PAdES-LTV Название может быть многословным беспорядком, но документ на самом деле очень краткий и полезный для чтения.
DSS можно добавить после исходного диапазона байтов, также добавив временную метку, которая берет дайджест другого диапазона байтов, включающего весь файл, включая DSS, в конце файла. Вы должны включить расширение, чтобы это работало, см. «Глава 4.4 Словарь расширений». Более подробная информация содержится в связанном документе.
Я думаю, стоит упомянуть, что я обнаружил некоторые синтаксические ошибки в своем PDF-файле с помощью утилит Apache PDFBox. Хотел бы я найти его раньше.
Если вам интересно, я опубликовал библиотеку на github: https://github.com/hejsan/WeasySign. Он уже работает, но требует доработки.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.