Ga naar inhoud

Workflow voor ondertekende overeenkomsten

Spec: ETSI EN 319 142-2, §5.1 Spec: ISO 32000-2:2020, §12.8 Evidence: Mixed evidence

Een ondertekende overeenkomst is niet zomaar ‘een PDF met een handtekening erop’. Het is een document dat zo is voorbereid dat de handtekening de juiste bytes beschermt. Het is ondertekend op een niveau dat bij de verplichting past. Het is zo verpakt dat het nog steeds kan worden geverifieerd nadat het ondertekeningscertificaat is verlopen. Deze pagina doorloopt dat scenario van een leeg document tot een langlopende overeenkomst. De pagina is eerlijk over welke stappen de engine vandaag al bedraadt en welke stappen alleen als bevroren oppervlak beschikbaar zijn.

Een contract dat op de dag van ondertekening verifieert en drie jaar later in een geschil faalt, is erger dan helemaal geen handtekening, omdat iemand erop heeft vertrouwd. De fout zit zelden in de cryptografie. Meestal ontbreekt een tijdstempel of intrekkingsbewijs, lang nadat de ondertekenaar is vertrokken.

De ondertekeningsverplichting vooraf kiezen en bij ondertekening het bewijs produceren dat die verplichting nodig heeft, maakt het verschil tussen een overeenkomst die standhoudt en een die stilletjes vervalt. Dit is een beslissing die u één keer in de workflow neemt, in plaats van die bij elk geschil opnieuw te moeten ontdekken.

  • Bereid eerst voor, onderteken daarna. Een handtekening dekt precies het bytebereik waarover die is berekend. Beslis dat het document definitief is — inclusief eventuele later toegevoegde revisies — voordat u ondertekent, niet daarna.
  • Kies het niveau voor de verplichting, niet andersom. PAdES definieert een progressie: een basishandtekening, een met tijdstempel, een met ingebed validatiemateriaal en een die opnieuw is gestempeld voor onbepaalde archiveringsgeldigheid (ETSI EN 319 142-2 §5.1).
  • Langetermijngeldigheid is een structuur, geen eigenschap. Ze bestaat uit een Document Security Store plus een documenttijdstempel, in het bestand geschreven (ISO 32000-2:2020 §12.8).
  • Wees precies over de integratienaad. De high-level Document::setSignature() van NextPDF legt de publieke API vast, maar faalt snel in plaats van een niet-ondertekend bestand uit te geven. Het bedrade pad is de lower-level orchestrator. Deze pagina doet niet alsof het anders is.

NextPDF scheidt de beslissing van het mechanisme. De beslissing is welk PAdES-niveau de verplichting nodig heeft. Het mechanisme is hoe de bytes worden ondertekend en hoe het validatiemateriaal wordt meegedragen. Teams die dit als één geheel behandelen, eindigen met een handtekening die geldig is maar niet duurzaam.

Het scenario heeft vier fasen.

  1. Prepare the document Compose the agreement and treat it as final. The signature will protect this exact byte range and nothing added outside it without a new revision.
  2. Choose the obligation B-B proves who. B-T adds trusted time. B-LT embeds the material to validate later. B-LTA re-stamps for indefinite validity.
  3. Sign A CMS signature is embedded in the signature dictionary over the byte range; a timestamp is requested from a TSA if the level needs one.
  4. Preserve For long-term levels, the Document Security Store and a document timestamp are written so the signature outlives its certificate.
Het scenario van de ondertekende overeenkomst van begin tot eind: elke fase voegt een garantie toe, en het niveau dat u in fase twee kiest, bepaalt hoeveel bewijs fase drie en vier moeten produceren.

De enum voor niveaus is echt en legt de verplichting expliciet vast. B-B bewijst de identiteit van de ondertekenaar. B-T voegt een vertrouwd tijdstempel toe: ‘wanneer’ wordt even stellig gevraagd als ‘wie’. B-LT sluit de certificaten en intrekkingsantwoorden in die nodig zijn om de handtekening te valideren nadat het ondertekeningscertificaat is verlopen. B-LTA voegt documenttijdstempels toe zodat de vertrouwensketen kan worden verlengd voor onbepaalde tijd door opnieuw te stempelen voordat elk tijdstempelcertificaat vervalt. De enum weet welke niveaus een tijdstempel vereisen en welke ingebed validatiemateriaal vereisen, zodat de engine een onmogelijke combinatie kan weigeren in plaats van een misleidend ‘ondertekend’ bestand te produceren.

De progressie is standaardonderbouwd. Evidence: Standard-backed Spec: ETSI EN 319 142-2, §5.1 beschrijft PAdES-niveaus die voortbouwen op de bouwstenen van EN 319 142-1, vanaf een basisingebedde handtekening naar hogere niveaus. De langetermijnstructuur is vastgelegd door Spec: ISO 32000-2:2020, §12.8 : langetermijnvalidatie berust op een Document Security Store en een documenttijdstempelwoordenboek die in het bestand worden geschreven.

Het niveaumodel is code-onderbouwd. Evidence: Code-backed De SignatureLevel-enum heeft de vier PAdES-gevallen (B-B, B-T, B-LT, B-LTA) met predicaatmethoden voor ‚vereist een tijdstempel‘, ‚vereist ingebed validatiemateriaal‘ en ‚vereist documenttijdstempels‘. De high-level Document::setSignature() is gekoppeld aan een fail-fast bewaking die een blokkerende, bruikbare diagnostiek geeft in plaats van een niet-ondertekend document uit te geven — verifieerbaar gedrag, geen bewering.

Het langetermijnonderhoudsgedrag is op mogelijkheidsniveau gedocumenteerd voor het Premium-niveau: het archiveringsoppervlak schrijft de DSS en VRI per handtekening, inspecteert de archiveringsvolledigheid met een gezondheidscontrole en stempelt opnieuw met een documenttijdstempel voordat het tijdstempelcertificaat verloopt. De documentatie stelt onomwonden dat de verifieerder nog steeds beslist.

Dit toont de beslissing — het kiezen van de verplichting — met behulp van de echte enum. Het bedrade ondertekeningspad is de lower-level orchestrator. De high-level aanroep wordt alleen getoond om het fail-fastgedrag expliciet te maken.

<?php
declare(strict_types=1);
use NextPDF\Security\Signature\SignatureLevel;
/**
* Map a business obligation to a PAdES level.
*
* The obligation drives the level, not the reverse — choosing B-B for a
* 10-year contract is a decision you do not want to make implicitly.
*/
function levelForObligation(string $obligation): SignatureLevel
{
return match ($obligation) {
// Internal sign-off, short retention, signer identity is enough.
'internal_approval' => SignatureLevel::PAdES_B_B,
// Counterparty agreement: prove the moment of signing.
'counterparty_agreement' => SignatureLevel::PAdES_B_T,
// Regulated contract that must verify after cert expiry.
'regulated_contract' => SignatureLevel::PAdES_B_LT,
// Long-lived legal record: indefinite, re-stampable validity.
'long_term_legal_record' => SignatureLevel::PAdES_B_LTA,
default => throw new \InvalidArgumentException(
"Unknown obligation: {$obligation}",
),
};
}
$level = levelForObligation('regulated_contract');
// The enum carries the obligation's implications with it.
$needsTsa = $level->requiresTimestamp(); // true for B-T+
$needsDss = $level->requiresDss(); // true for B-LT+
$needsArchive = $level->requiresDocumentTimestamp(); // true only for B-LTA

Het niveauobject is niet zomaar een label. Het legt vast wat de verplichting inhoudt, zodat de wiring downstream dit niet opnieuw hoeft af te leiden.

Het terugkerende misverstand is ‘de handtekening is geldig, dus we zijn klaar’. Geldigheid vandaag is noodzakelijk, maar niet voldoende. Een handtekening wordt berekend over een bytebereik. Alles wat in een latere revisie buiten dat bereik wordt toegevoegd, valt er niet onder; daarom komt voorbereiding vóór ondertekening. Een handtekening die nu verifieert, kan later falen wanneer het certificaat verloopt, tenzij het validatiemateriaal op het moment van ondertekenen is ingebed. ‘Geldig’ en ‘duurzaam’ zijn verschillende garanties, en alleen de verplichting vertelt u welke u daadwerkelijk nodig hebt.

Een gerelateerde valkuil specifiek voor deze engine: aannemen dat de high-level setSignature() vandaag een ondertekend bestand produceert. Dat doet het niet. Het faalt snel met opzet. Behandel de diagnostiek als het contract.

  • Document::setSignature() is een bevroren publiek oppervlak, geen bedrade ondertekenaar. Het faalt snel met een blokkerende diagnostiek. Het geeft nooit een niet-ondertekende PDF uit in plaats van een ondertekende. Het bedrade pad is de lower-level tweefasen-orchestrator.
  • Langetermijnvalidatieonderhoud (DSS/VRI, gezondheidscontrole, de archiveringstijdstempellus) is een mogelijkheid op Premium-niveau. Core biedt de archiveringslus niet. Zie de grens hieronder.
  • Een handtekening beschermt precies haar bytebereik. Later toegevoegde revisies staan los daarvan. De engine breidt de dekking niet met terugwerkende kracht uit.
  • NextPDF produceert en onderhoudt de structuren; het oordeelt niet. Of een handtekening vertrouwd is, hangt af van de vertrouwensankers en het beleid van de verifieerder, die buiten de engine vallen.
  • B-LTA maakt een handtekening niet uit zichzelf eeuwig. Het maakt onbepaalde geldigheid alleen mogelijk als de herstempellus volgens schema draait voordat elk tijdstempelcertificaat verloopt.
  • Deze pagina beschrijft het Premium-archiveringsoppervlak op gedragsniveau. Ze beweert niet dat enige specifieke rechtbank of autoriteit het aanvaardt.
PAdES signing and long-term validity — edition availability
Edition Availability
Core

Core biedt de SignatureLevel-enum aan en het bevroren Document::setSignature()-oppervlak (snelfalend). De bedrade lower-level orchestrator dekt basale ondertekening. Langetermijnarchiveringsonderhoud zit niet in Core.

Pro

PAdES-basisondertekening (B-B / B-T) via de orchestrator is beschikbaar.

Enterprise

Voegt B-LT / B-LTA toe, de Document Security Store, VRI-onderhoud per handtekening, de LTV-gezondheidscontrole en de archiveringslus voor documenttijdstempels voor onbepaalde geldigheid.

  • PAdES baseline-profielenB-B, B-T, B-LT, B-LTA uitgelegd als een progressie en hoe u kiest.
  • Langetermijnvalidatie — waarom een handtekening die vandaag verifieert over tien jaar kan falen, en hoe LTV het bewijs inbedt.
  • De integratiebeslissingsgids — welk ecosysteempakket past bij een ondertekeningsworkflow, inclusief de menselijke goedkeuringsnaad in NextPDF Connect.
  • PAdES — PDF Advanced Electronic Signatures: de ETSI-profielfamilie die definieert hoe een geavanceerde elektronische handtekening in een PDF wordt meegedragen.
  • Bytebereik — de aaneengesloten reeks bestandsbytes waarover een handtekening wordt berekend; inhoud daarbuiten wordt niet door die handtekening beschermd.
  • Handtekeningniveau (B-B / B-T / B-LT / B-LTA) — de PAdES-progressie: wie ondertekende, wanneer, met ingebed validatiemateriaal en herstempelbaar voor onbepaalde archiveringsgeldigheid.
  • TSA — Time-Stamping Authority: een RFC 3161-dienst die bevestigt dat een documenttoestand op een gegeven UTC-moment bestond.
  • DSS (Document Security Store) — de opslag in het bestand van certificaten, OCSP-antwoorden en CRLs die nodig zijn om een handtekening te valideren nadat het certificaat is verlopen.
  • LTV (Long-Term Validation) — een handtekening door de tijd heen verifieerbaar houden door het validatiebewijs in te bedden en opnieuw te stempelen.
  • Fail-fast — weigeren een misleidend artefact te produceren en in plaats daarvan een bruikbare fout geven, zodat er geen stilletjes verkeerd bestand wordt uitgegeven.