Native RFC3161 timestamps
HPDFHeadlessTimestamp 在 Linux 与 Windows 上提供原生 OpenSSL 3 请求创建以及经认证的 RFC3161 响应与令牌验证
HPDFSignHeadlessCMS、SignToFile 和 SignPFXToFile 用 SHA-256 哈希实际 CMS 签名字节,并把验证通过的响应令牌作为 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,由调用方控制网络 I/O 期间的 HTTP 认证、TLS 策略、截止时间和取消
请求包含新鲜密码学 nonce 并请求 TSA 证书;响应必须同时匹配请求 nonce 和提供的签名值
验证认证完整 CMS 令牌,检查 TSA 证书路径和关键时间戳 EKU,验证 ESS 签名证书绑定,并按 TSTInfo 携带的算法用 SHA-256、SHA-384 或 SHA-512 对照实际签名字节检查 messageImprint
RequireRevocation 加载显式 CRL 文件并启用经签发者验证的证书吊销检查;缺失、过期或已吊销的证据会失败,而不是产出可信结果
既有令牌可以在没有原始请求 nonce 的情况下离线验证;新鲜响应验证另外检查原始请求 nonce 和响应状态
已提供 imprint 的回调
ForImprint 系列函数接受预计算的 SHA256、SHA384 或 SHA512 摘要及其 THPDFHeadlessTimestampDigest 值,然后在 RFC3161 请求中原样保留这些摘要字节,不再重新哈希
签名回调已经提供 messageImprint 时使用这些函数,包括 Windows 的 THPDFCMSTimestampCallback;原始签名请求辅助函数继续使用 SHA256,离线令牌验证则按实际受支持的 TSTInfo 算法哈希原始签名字节
Token := HPDFRequestHeadlessTimestampForImprint(MessageImprint,
htdSHA384, TimestampOptions);
所选摘要的 imprint 长度必须是 32、48 或 64 字节;绑定请求的验证另检查原始新鲜 nonce、摘要 OID、CMS 签名、TSA 证书绑定、显式信任根、EKU 和配置的吊销证据
请求创建、响应验证、离线令牌验证、传输和摘要值分别参见 request creation、response verification、offline token verification、transport 和 digest values
可信证书与 CRL 有效性在验证时评估,因此 TSA 证书已过期的归档令牌需要归档验证策略与证据,而不是绕过当前信任检查
畸形令牌、重复时间戳属性、不匹配 imprint、未知根、无效 EKU、过期 TSA 证书、已吊销 TSA 证书、过期 CRL、响应预算和取消均由原生与独立验收测试覆盖
时间戳验证报告与文档签名者证书信任相互独立;签名时间戳不认证之后未签名的 PDF 修订
时间戳函数只在使用时加载 OpenSSL 时间戳符号;需要时把 HOTPDF_OPENSSL_LIBRARY 设为显式且架构匹配的 OpenSSL 3 共享库