Метки времени подписания в Windows
Операция подписания Windows может запросить подлинную метку времени RFC3161 через синхронный колбэк приложения и опубликовать PDF только после аутентификации ответа
Опции подписания
{"schemaVersion":1,"type":"sign","incremental":true,
"existingField":true,"fieldName":"ApprovalOne",
"pfxFile":"C:/keys/signer.pfx","pfxPassword":"password",
"cades":true,"digestMethod":"SHA384","timestamp":true,
"timestampURL":"https://tsa.example/service",
"timestampTrustedCAFile":"C:/trust/tsa-roots.pem",
"timestampTrustedCRLFile":"C:/trust/tsa-crls.pem",
"requireTimestampRevocation":true}
timestamp по умолчанию false; значение true требует транспортный колбэк приложения и явный timestampTrustedCAFile с доверенными PEM-корнями сертификатов
digestMethod выбирает фактический digest CMS документа и алгоритм imprint метки времени из SHA256, SHA384 или SHA512; messageImprint хеширует фактические октеты подписи CMS ровно один раз
timestampTrustedCRLFile необязательно поставляет PEM CRL; requireTimestampRevocation требует этот файл и включает проверки CRL issuer и сертификата, включая отозванные сертификаты и истёкшие доказательства
Файлы ввода доверия остаются открытыми с запретом совместной записи во время подписания, а их суммарный размер ограничен одной восьмой memoryBytes до загрузки OpenSSL
Каждый запрос содержит свежую криптографическую nonce и запрашивает сертификаты TSA; валидация ответа аутентифицирует nonce запроса, imprint, полную подпись CMS, привязку сертификата подписанта ESS, цепочку сертификатов и критичный EKU метки времени
Транспорт C ABI
Передайте hpdf_signing_operation_v1 в hpdf_document_execute_json_v1, установите operation.struct_size в sizeof(hpdf_signing_operation_v1) и предоставьте timestamp_transport и timestamp_user_data
Префикс операции сохраняет существующую раскладку и версию ABI hpdf_operation_v1; обычные операции продолжают использовать исходную структуру
Колбэк получает полный DER TimeStampReq и заимствованный response_io; запишите полный DER TimeStampResp через response_io.write и верните hpdf_status
Колбэк выполняется на вызывающем потоке, а указатели IO запроса и ответа действительны только во время этого вызова; сетевым транспортом, аутентификацией, таймаутами и политикой соединений владеет приложение
response_io.is_cancelled опрашивает колбэки отмены ввода, вывода и результата операции; записи ответа соблюдают максимум 16 МиБ, дополнительно ограниченный одной восьмой memoryBytes, перед копированием памяти колбэка
Сбой записи ответа или отмены остаётся активным для операции, даже если колбэк затем вернул успех; неудавшиеся ответы не могут опубликовать байты PDF
Pascal-точка входа сервиса
THPDFJobProcessor.ExecuteLoadedSigningOperation принимает загруженный документ, JSON-объект операции, выходной поток, контрольную точку, колбэк THPDFHeadlessTimestampTransport и непрозрачный контекст колбэка
Pascal-транспорт получает DER запроса и возвращает DER ответа; вложенное синхронное подписание восстанавливает контекст объемлющего колбэка при возврате внутренней операции
Seed-значения и провенанс
Обязательное ограничение SV TimeStamp удовлетворяется фактическим аутентифицированным ответом; когда обязательный словарь TimeStamp указывает URL, timestampURL обязан совпадать с этим значением
timestampURL — заявленный приложением провенанс транспорта; сравнение объявленного URL не устанавливает идентичность HTTPS-сервера, и приложение обязано аутентифицировать выбранный эндпоинт
Автономные файловые задания без колбэка приложения не могут выполнить запрос метки времени; одна лишь строка URL не может удовлетворить обязательную метку времени
См. задания инкрементального подписания PFX и нативную проверку RFC3161