Windows Signing Timestamps

Windows-signeringsoperationen kan begära en genuin RFC3161-tidsstämpel via ett synkront applikationsåteranrop och publicera PDF:n först efter att svaret autentiserats

Signeringsalternativ

{"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 är false som standard; ett true-värde kräver applikationens transportåteranrop och en explicit timestampTrustedCAFile som innehåller betrodda PEM-certifikatrötter

digestMethod väljer den faktiska dokumentets CMS-digest och tidsstämpelavtrycksalgoritmen ur SHA256, SHA384 eller SHA512; messageImprint hashar de faktiska CMS-signaturoktetterna exakt en gång

timestampTrustedCRLFile tillhandahåller valfritt PEM-CRL:er; requireTimestampRevocation kräver den filen och aktiverar utfärdar- och certifikat-CRL-kontroller, inklusive spärrade certifikat och utgånget bevis

Förtroendeindatafiler förblir öppna med skrivdelning nekad under signeringen, och deras kombinerade storlek begränsas till en åttondel av memoryBytes innan OpenSSL läser in dem

Varje förfrågan innehåller en färsk kryptografisk nonce och begär TSA-certifikat; svarsvalidering autentiserar förfrågningsnoncen, avtrycket, completa CMS-signatur, ESS-signeringscertifikatbindning, certifikatkedja och kritisk tidsstämpel-EKU

C ABI-transport

Skicka hpdf_signing_operation_v1 till hpdf_document_execute_json_v1, sätt operation.struct_size till sizeof(hpdf_signing_operation_v1) och tillhandahåll timestamp_transport och timestamp_user_data

Operationsprefixet behåller den befintliga hpdf_operation_v1-layouten och ABI-versionen; ordinära operationer fortsätter att använda den ursprungliga strukturen

Återanropet tar emot den completa DER TimeStampReq och en lånad response_io; skriv den completa DER TimeStampResp genom response_io.write och returnera en hpdf_status

Återanropet körs på den anropande tråden, och förfrågnings- och svars-IO-pekare förblir giltiga endast under det anropet; applikationen äger nätverkstransport, autentisering, timeout och anslutningspolicy

response_io.is_cancelled pollerar operationens indata-, utdata- och resultatavbrottsåteranrop; svarsskrivningar tillämpar ett maximum på 16 MiB, dessutom takat till en åttondel av memoryBytes innan återanropsminne kopieras

Ett svarsskriv- eller avbrottsfel förblir aktivt för operationen även när återanropet därefter returnerar framgång; misslyckade svar kan inte publicera PDF-byte

Pascal-tjänsteingång

THPDFJobProcessor.ExecuteLoadedSigningOperation accepterar det inlästa dokumentet, operationens JSON-objekt, utdataström, kontrollpunkt, THPDFHeadlessTimestampTransport-återanrop och opakt återanropskontext

Pascal-transporten tar emot förfrågnings-DER och returnerar svars-DER; kapslad synkron signering återställer den omgivande återanropskontexten när den inre operationen returnerar

Seed-värden och proveniens

Ett obligatoriskt SV TimeStamp-krav uppfylls av ett faktiskt autentiserat svar; när det obligatoriska TimeStamp-ordlistan specificerar en URL måste timestampURL matcha det värdet

timestampURL är applikationshävdad transportproveniens; att jämföra den deklarerade URL:en etablerar inte HTTPS-serveridentitet, och applikationen måste autentisera sin valda ändpunkt

Fristående filjobb utan applikationsåteranrop kan inte utföra en tidsstämpelförfrågan; en URL-sträng ensam kan inte uppfylla en obligatorisk tidsstämpel

Se inkrementell PFX-signering och nativ RFC3161-verifiering