Нативные метки времени RFC3161

HPDFHeadlessTimestamp предоставляет нативное создание запросов OpenSSL 3 и аутентифицированную проверку ответов и токенов RFC3161 на Linux и Windows

HPDFSignHeadlessCMS, SignToFile и SignPFXToFile хешируют фактические октеты подписи CMS с SHA-256 и прикрепляют проверенный токен ответа как неподписанный атрибут signatureTimeStampToken

Настройте THPDFHeadlessCMSOptions.Timestamp.TrustedCAFile и Transport до подписания и установите RequireTimestamp, когда аутентифицированный токен обязателен

Options := THPDFHeadlessCMSOptions.Default;
Options.TrustedCAFile := SignerTrustFile;
Options.RequireTimestamp := True;
Options.Timestamp.TrustedCAFile := TSATrustFile;
Options.Timestamp.TrustedCRLFile := TSACRLFile;
Options.Timestamp.RequireRevocation := True;
Options.Timestamp.Transport := RequestTimestamp;
Options.Timestamp.TransportContext := TransportContext;
Report := Document.SignPFXToFile(FieldIndex, OutputFile, IdentityPFX,
  IdentityPassword, Options);

Принадлежащий вызывающему транспорт получает полный DER TimeStampReq и возвращает полный DER TimeStampResp, позволяя вызывающему управлять HTTP-аутентификацией, политикой TLS, дедлайнами и отменой во время сетевого ввода-вывода

Запросы содержат свежие криптографические nonce и запрашивают сертификаты TSA; ответы должны совпадать и с nonce запроса, и с переданным значением подписи

Проверка аутентифицирует полный токен CMS, проверяет путь сертификата TSA и критичный EKU метки времени, верифицирует привязку сертификата подписанта ESS и сверяет messageImprint SHA-256, SHA-384 или SHA-512 с фактическими октетами подписи по алгоритму, перенесённому в TSTInfo

RequireRevocation загружает явный файл CRL и включает проверки отзыва сертификатов с проверкой issuer; отсутствующие, истёкшие или отозванные доказательства проваливают операцию, а не дают доверенный результат

Существующие токены можно проверить офлайн без исходной nonce запроса; проверка свежего ответа дополнительно проверяет исходную nonce запроса и статус ответа

Колбэки, уже поставляющие imprint

Функции ForImprint принимают предвычисленный digest SHA256, SHA384 или SHA512 и его значение THPDFHeadlessTimestampDigest, затем сохраняют эти точные байты digest в запросе RFC3161 без повторного хеширования

Используйте эти функции, когда колбэк подписания уже поставляет messageImprint, включая Windows-колбэк THPDFCMSTimestampCallback; helper'ы запроса сырой подписи продолжают использовать SHA256, а офлайн-проверка токена хеширует исходные октеты подписи фактическим поддерживаемым алгоритмом TSTInfo

Token := HPDFRequestHeadlessTimestampForImprint(MessageImprint,
  htdSHA384, TimestampOptions);

Длина imprint должна быть 32, 48 или 64 байта для выбранного digest; проверка, привязанная к запросу, дополнительно проверяет исходную свежую nonce, OID digest, подпись CMS, привязку сертификата TSA, явные корни доверия, EKU и сконфигурированные доказательства отзыва

См. создание запроса, проверку ответа, офлайн-проверку токена, транспорт и значения digest

Действительность доверенных сертификатов и CRL оценивается в момент проверки, поэтому архивному токену с истёкшим сертификатом TSA нужны политика архивной валидации и доказательства, а не обход текущих проверок доверия

Некорректные токены, дублирующиеся атрибуты метки времени, несовпадающие imprint, неизвестные корни, недопустимые EKU, истёкшие сертификаты TSA, отозванные сертификаты TSA, истёкшие CRL, бюджеты ответов и отмена покрыты нативными и независимыми приёмочными тестами

Отчёты проверки метки времени отделены от доверия сертификату подписанта документа; метка времени подписи не аутентифицирует последующие неподписанные ревизии PDF

Функции меток времени загружают свои символы OpenSSL для меток времени только при использовании; при необходимости задайте HOTPDF_OPENSSL_LIBRARY в явную совпадающую по архитектуре разделяемую библиотеку OpenSSL 3