原生 RFC3161 時間戳記
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 與回應狀態
已提供印記的 callback
ForImprint 函式接受預先計算的 SHA256、SHA384 或 SHA512 摘要與其 THPDFHeadlessTimestampDigest 值,然後把那些精確的摘要位元組原封放進 RFC3161 請求,不再重新雜湊
當簽章 callback 已提供 messageImprint 時(包括 Windows 的 THPDFCMSTimestampCallback)請使用這些函式;原始簽章的請求輔助函式仍使用 SHA256,離線權杖驗證則以實際支援的 TSTInfo 演算法雜湊原始簽章位元組
Token := HPDFRequestHeadlessTimestampForImprint(MessageImprint,
htdSHA384, TimestampOptions);
所選摘要的印記長度必須是 32、48 或 64 位元組;綁定請求的驗證另外檢查原始新鮮 nonce、摘要 OID、CMS 簽章、TSA 憑證綁定、明確信任根、EKU 與已設定的撤銷證據
受信任憑證與 CRL 的有效性在驗證當下評估,因此 TSA 憑證已過期的封存權杖需要保存驗證原則與證據,而不是繞過目前的信任檢查
格式錯誤權杖、重複時間戳記屬性、不符的印記、未知根、無效 EKU、過期 TSA 憑證、已撤銷 TSA 憑證、過期 CRL、回應預算與取消,都由原生與獨立驗收測試涵蓋
時間戳記驗證報告與文件簽章者憑證信任是分開的;簽章時間戳記不會驗證之後未簽署的 PDF 修訂
時間戳記函式只在用到時才載入 OpenSSL 時間戳記符號;必要時請把 HOTPDF_OPENSSL_LIBRARY 指到架構相符的 OpenSSL 3 共用程式庫