Timestamps RFC3161 nativos
HPDFHeadlessTimestamp fornece criação nativa de pedidos com OpenSSL 3 e verificação autenticada de respostas e de tokens RFC3161 em Linux e Windows
HPDFSignHeadlessCMS, SignToFile e SignPFXToFile calculam o hash dos octetos reais da assinatura CMS com SHA-256 e anexam o token de resposta verificado como atributo não assinado signatureTimeStampToken
Configure THPDFHeadlessCMSOptions.Timestamp.TrustedCAFile e Transport antes de assinar, e defina RequireTimestamp quando um token autenticado for obrigatório
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);
O transport próprio de quem chama recebe um TimeStampReq DER completo e devolve um TimeStampResp DER completo, permitindo a quem chama controlar autenticação HTTP, política TLS, prazos e cancelamento durante o I/O de rede
Os pedidos contêm nonces criptográficos frescos e pedem os certificados do TSA; as respostas têm de corresponder tanto ao nonce do pedido como ao valor de assinatura fornecido
A verificação autentica o token CMS completo, verifica o caminho de certificados do TSA e o EKU crítico de timestamp, verifica o binding ESS signing-certificate e compara o messageImprint SHA-256, SHA-384 ou SHA-512 contra os octetos reais da assinatura usando o algoritmo transportado pelo TSTInfo
RequireRevocation carrega o ficheiro explícito de CRLs e ativa verificações de revogação de certificados com emissores verificados; evidência em falta, expirada ou revogada falha em vez de produzir um resultado fidedigno
Tokens existentes podem ser verificados offline sem o nonce original do pedido; a verificação de respostas frescas verifica adicionalmente o nonce original do pedido e o status da resposta
Callbacks que já fornecem um imprint
As funções ForImprint aceitam um digest pré-calculado SHA256, SHA384 ou SHA512 e o valor THPDFHeadlessTimestampDigest dele e depois preservam esses bytes exatos de digest no pedido RFC3161 sem calcular o hash deles outra vez
Use estas funções quando um callback de assinatura já fornecer o messageImprint, incluindo o THPDFCMSTimestampCallback de Windows; os helpers de pedidos de assinaturas em bruto continuam a usar SHA256, enquanto a verificação offline de tokens calcula o hash dos octetos originais da assinatura com o algoritmo realmente suportado do TSTInfo
Token := HPDFRequestHeadlessTimestampForImprint(MessageImprint,
htdSHA384, TimestampOptions);
O comprimento do imprint tem de ser 32, 48 ou 64 bytes para o digest selecionado; a verificação vinculada a pedidos verifica adicionalmente o nonce fresco original, o OID do digest, a assinatura CMS, o binding de certificados TSA, raízes de confiança explícitas, EKU e evidência configurada de revogação
Veja a criação de pedidos, a verificação de respostas, a verificação offline de tokens, o transport e os valores de digests
A validade de certificados e de CRLs fidedignos é avaliada no momento da verificação, pelo que um token arquivado cujo certificado TSA tenha expirado precisa de uma política e evidência de validação de arquivo, em vez de contornar as verificações atuais de confiança
Tokens malformados, atributos de timestamps duplicados, imprints desencontrados, raízes desconhecidas, EKUs inválidos, certificados TSA expirados ou revogados, CRLs expiradas, orçamentos de respostas e cancelamento estão cobertos por testes nativos e independentes de aceitação
Os relatórios de verificação de timestamps são separados da confiança em certificados de signers de documentos; um timestamp de assinatura não autentica revisões PDF posteriores não assinadas
As funções de timestamps carregam os símbolos OpenSSL de timestamps delas apenas quando usadas; defina HOTPDF_OPENSSL_LIBRARY com uma biblioteca partilhada OpenSSL 3 explícita da arquitetura correspondente quando necessário