Термин «LTV включен»
Насколько я знаю, нет формальной спецификации значения термина «LTV включен». Есть несколько ненормативных описаний, в частности:
Леонард Розентхол (PDF Architect & Principal Scientist в Adobe) однажды охарактеризовал его как
LTV включен означает, что вся информация, необходимая для проверки файла (минус root сертификаты), содержится в.
(список рассылки iText на 10 января 2013 г.)
Другой сотрудник Adobe, Стивен Мэдвин, описывает реализацию как
В рамках процесса проверки [Acrobat] выясняет, нужно ли это go онлайн, чтобы загрузить информацию об отзыве, или, это вся информация об отзыве, встроенная в файл PDF. На данный момент он знает, что он собирается сказать на панели навигации по подписи. Если необходимо было загрузить данные, то подпись не поддерживает LTV, но если в файле содержится все обеспечение отзыва, тогда подпись включена.
(форумы поддержки Adobe в сентябре 24, 2013)
Таким образом, значение термина «LTV enabled» зависит от деталей реализации алгоритмов проверки подписи Adobe Acrobat (который являются закрытым исходным кодом и не обязательно фиксированными) и на базовых конфигурациях. Вы можете прочесть меня об этом в нескольких старых ответах о переполнении стека ...
Тем не менее, механизмы, лежащие в основе этих деталей реализации, не являются полностью произвольными, они, по сути, образуют профиль (хотя и проприетарный , закрытая и, возможно, даже изменяющая одну) существующих опубликованных спецификаций по этой теме c, в частности RFC.
В частности, совершенно ясно, что вы должны сделать, чтобы иметь хороший шанс пометить свою подпись «LTV включен» - добавить всю информацию, которая может понадобиться валидатору в процессе валидации, в частности
- Добавить все промежуточные сертификаты из сертификата подписавшего в сертификат, которому доверяет Adobe. Если вы не уверены, какие сертификаты являются доверенными, добавьте все сертификаты до root сертификата. Если вы знаете, что какой-либо из этих сертификатов будет перекрестно подписан другим ЦС, добавьте сертификаты всех этих возможных цепочек.
- Для всех этих сертификатов (кроме root сертификатов) получите информацию об отзыве (CRL или ответы OCSP). ) и добавьте их тоже.
- Для каждого добавленного ответа CRL и OCSP определите свой соответствующий сертификат подписавшего, добавьте этот сертификат и сертификаты в его цепочке к документу, найдите и добавьте информацию об отзыве для них (если они root сертификаты или сертификаты с расширением
id-pkix-ocsp-nocheck
, или у вас уже есть информация об их аннулировании) и т. д.
Однако остается одна проблема, и она определяет, как именно добавьте всю эту информацию в свой PDF.
Если перед подписанием вы знаете сертификат подписавшего, вы можете добавить все сертификаты в хранилище сертификатов в контейнере подписи для создания и все данные отзыва в подписанный adbe-revocationInfoArchival
атрибут SignerInfo
в нем.
Если вы этого не сделаете, вы можете поместить эти сертификаты и информацию об аннулировании в хранилище безопасности документов (DSS) PAdES, то есть в специальные структуры при постепенном обновлении подписанного PDF. Этот DSS еще не определен в ISO 32000-1; Первоначально он был определен в технических спецификациях ETSI (ETSI TS 102 778-4) и более поздних нормах (ETSI EN 319 142-1) и был принят в текущую спецификацию PDF ISO 32000-2.
Почему ваша подпись PDF не поддерживает LTV
Ваш PDF использует DSS для хранения сертификатов и информации об аннулировании, но в ней есть недостатки.
Как уже объяснил Питер Г. в его ответе , DSS вашего PDF в массивах CRL и CRL не содержит фактических CRL.
Объекты там - это не просто ответы OCSP, как сказал Питер Г., но вместо этого ответы OCSP обернуты в какую-то другую структуру. Фактический ответ OCSP в этих объектах начинается со смещения 160 ...
Я думаю, ваш код в этом буфере crlContext->pbCrlEncoded
содержит некоторую оболочку для произвольной информации об аннулировании, и вы должны сначала проанализировать ее, чтобы увидеть, какой тип это на самом деле и затем разверните этот фактический объект информации отзыва и вставьте его в соответствии с его типом. Я не знаю WynCrypt, так что это просто догадки ...
Дополнительные элементы в DSS
Два года go Я также создал LTV-enabler. В то время эксперименты предполагали, что Adobe Acrobat требует определенных элементов DSS, которые указываются как необязательные, по крайней мере, при определенных обстоятельствах: я включил LTV в PDF, используя Adobe Acrobat, и постепенно уменьшил этот PDF до того, что я создал. Оказалось, что подраздел VRI DSS и записи в нем TU были необходимы, удалив либо сделав файл не поддерживающим LTV.
Теперь я использовал свой тот LTV -enabler (на самом деле вариант, которому могут быть предоставлены дополнительные сертификаты) для LTV-включения вашего PDF. Это сработало. Из интереса я также сократил этот PDF с поддержкой LTV. Интересно, что я мог бы удалить TU и даже VRI без потери статуса с поддержкой LTV.
Таким образом, либо Adobe Acrobat изменился, чтобы вообще больше не требовать этих элементов или файл, с которого я начинал в моих предыдущих экспериментах, был несколько особенным случаем, требующим дополнительных данных, в то время как в других случаях они не требуются.