Отчёты валидации подписей CMS
Автономные CMS API открывают каждую основную SignerInfo и рекурсивно вложенные counterSignature в детерминированном порядке документа
Граф подписантов
HPDFParseCMSSignatures возвращает все записи основных подписантов, а HPDFVerifyCMSSignaturesEx проверяет их против переданного content stream
HPDFVerifyCMSSignerReport добавляет рекурсивные контрподписи и идентифицирует каждую запись по Kind, SignerIndex, ParentSignerIndex, NestingDepth и стабильному пути вроде SignerInfo[0].CounterSignature[1]
THPDFCMSVerifyOptions.MaxSignerCount и MaxCounterSignatureDepth ограничивают работу на враждебных контейнерах, сохраняя детерминированный вывод
Отчёт по сертификатам и уликам
HPDFBuildCMSValidationReport совмещает верификацию подписантов с управляемой вызывающим кодом офлайн-валидацией сертификатов для каждого подписанта графа
Возвращаемый THPDFSignatureValidationReport содержит агрегированные результаты подписи и цепочки, счётчики подписантов, состояние успеха, машиночитаемый THPDFValidationFailureCode и полные THPDFSignatureInfo по каждому подписанту
Детали сертификатов по каждому подписанту включают выбранную цепочку, результат доверия, источник и timestamp отзывов, решения по OCSP nonce, использование delta и indirect CRL, действующие политики сертификатов, минимальные наблюдённые стойкости ключей и диагностику политики алгоритмов
Экспорт JSON
HPDFSignatureValidationReportToJSON экспортирует отчёт в JSON схемы версии 1 с экранированными текстовыми значениями и стабильными именами полей — пригодно для audit log, policy engine и тестовой автоматизации
Экспортёр не ходит в сеть и не изменяет отчёт или исходный stream
Практические рекомендации
- Задавайте явные trust anchors и выставляйте
ValidationTime, когда воспроизводите историческое решение валидации - Используйте
rvmRequire, когда успешный результат обязан включать актуальные офлайн-улики отзывов - Используйте
onpRequireMatchсExpectedOCSPNonce, когда сценарий сам формирует исходный OCSP-запрос - Для недоверенного ввода CMS ставьте консервативные лимиты на число подписантов и глубину вложенности
- Сохраняйте JSON-отчёт вместе с точной подписанной ревизией и набором улик, когда audit trail обязан быть воспроизводимым
См. также: VerifyLoadedSignatureWithTrust, GetLoadedSignatureInfo