Pro editie
Beveiliging
In het kort
Sectie met titel “In het kort”NextPDF Pro voegt bovenop NextPDF Core een security-oppervlak toe: content masking tijdens generatie, PII-detectie in de tekstlaag, remote en cloud-KMS-ondertekeningsstrategieën en multi-party sequentieel ondertekenen. NextPDF Core produceert de PAdES B-B- en B-T-niveaus; Pro produceert dezelfde niveaus en voegt deze ondertekeningsworkflows daar bovenop toe (voor B-T een B-B-handtekening plus één RFC 3161 signature-time-stamp op de handtekeningwaarde). Deze pagina is op gedragsniveau. Het beschrijft wat elk onderdeel doet, wat het niet doet, en waar de Enterprise-grens begint.
Beschikbaarheid en licenties
Sectie met titel “Beschikbaarheid en licenties”Deze functionaliteit wordt geleverd in NextPDF Pro (nextpdf/pro) en wordt geactiveerd met een licentie-envelope op Pro-niveau. Een implementatie zonder die entitlement laadt de klassen van deze functionaliteit niet. Vergelijk edities en vraag een licentie aan.
Core levert de software-CMS-ondertekenaar, de RFC 3161-tijdstempelclient, RFC 5280-padvalidatie en OCSP- en CRL-revocatiecontrole. Pro voegt de masking, PII-detectie en de remote/cloud-KMS/sequentiële ondertekeningsworkflows toe; die workflows produceren dezelfde Core-B-B- en B-T-niveaus via de Core-RFC 3161-stack (voor B-T één signature-time-stamp op de handtekeningwaarde). Een implementatie zonder een actieve Pro-entitlement laadt deze klassen niet; het Core-ondertekeningscontract blijft ongewijzigd werken.
Installatie
Sectie met titel “Installatie”composer require nextpdf/pro:^3Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”De masking-engine past een geordende lijst regels toe op tekst voordat de pagina wordt geschreven. Elke regel matcht een reguliere expressie. Een regel vervangt een match op een van drie manieren: een black-box-fill die de tekst uit de contentstream verwijdert, een asterisk-run met hetzelfde aantal tekens, of een vast label zoals [REDACTED]. De engine verwijdert de onderliggende tekstobjecten voor de black-box-modus zoals getest; het claimt niet dat elke vorm van gevoelige inhoud wordt gevonden. Detectie hangt af van de regels die je configureert.
Het PII-oppervlak is een detectietool, geen redaction-garantie. Het extraheert de tekstlaag en past daarna ingebouwde patronen toe voor e-mailadressen, telefoonnummers, United States Social Security numbers en creditcardnummers. Het retourneert een gemaskeerde weergave van de tekst en een aantal matches. Het overschrijft de gerenderde glyphs in de pagina-afbeelding niet. Een gescande pagina zonder tekstlaag levert geen matches op. Behandel het resultaat als patroongematchte detectie van de geconfigureerde typen, niet als volledige verwijdering van persoonsgegevens.
Het ondertekeningsoppervlak voegt remote en asynchrone workflows toe bovenop de Core-ondertekenaar. Een sessie berekent de documentdigest, bouwt de CMS signed attributes en geeft de signed-attributes-bytes door aan een ondertekeningsstrategie. Een strategie kan een cloud-KMS, een uitgestelde externe ondertekenaar of een ingest-pad zijn dat een bestaande CAdES- of XAdES-handtekening wikkelt. De sessie assembleert vervolgens de CMS SignedData en slaat deze DER-gecodeerd op in de Contents-vermelding van het handtekeningwoordenboek — ISO 32000-2 §12.8.1. De SignerInfo draagt de content-type- en message-digest-signed-attributes; het message-digest-berekeningsproces is RFC 5652 §5.4. Een verifier mag niet vertrouwen op door de originator berekende digests; deze herberekent onafhankelijk de content-digest en vergelijkt deze met het message-digest-attribuut, en de vergelijking moet kloppen om de handtekening geldig te maken — RFC 5652 §5.6 handtekeningverificatieproces.
NextPDF Core produceert de PAdES B-B- en B-T-niveaus; NextPDF Pro produceert dezelfde niveaus en voegt zijn ondertekeningsworkflows daar bovenop toe. Voor B-B assembleert de sessie een CMS SignedData met de B-B signed-attribute-set en past geen tijdstempel toe. Voor B-T voegt de sessie precies één RFC 3161 signature-time-stamp toe als een CMS unsigned attribuut op de handtekeningwaarde: een signature-time-stamp is een ongetekend attribuut dat één tijdstempeltoken draagt dat is berekend over de digitale handtekeningwaarde voor een ondertekenaar — ETSI EN 319 122-1 §5.3, en zijn MessageImprint is een hash van de SignerInfo-handtekeningveldwaarde, geïdentificeerd door de id-aa-timeStampToken-OID — RFC 3161 Appendix A. De tijdstempel-genTime is het UTC-moment waarop het token is aangemaakt — RFC 3161 §2.4.2. Omdat de tijdstempel een unsigned attribuut is, blijven de B-B signed digest, de SignerInfo-handtekeningwaarde en de PDF /ByteRange ongewijzigd; alleen de CMS groeit. Het RFC 3161-token wordt verkregen van een geconfigureerde tijdstempelprovider (de standaard Core RFC 3161-client, of een door de caller aangeleverde provider); B-T gebruikt een SHA-256-message-imprint op het standaard providerpad. NextPDF Pro implementeert PAdES B-T-ondertekeningsondersteuning volgens ETSI EN 319 122-1 §5.3, RFC 3161, RFC 5652 en RFC 5816; dit is fixture-geverifieerd. NextPDF Pro claimt geen onafhankelijke ETSI EN 319 142-1-certificering en claimt geen juridische geldigheid van het document. B-LT en B-LTA voegen een Document Security Store en documenttijdstempels toe voor validatie op lange termijn voor archivering — ETSI EN 319 142-2 §5.5; die niveaus zijn een Enterprise-capaciteit (nextpdf/enterprise) en worden niet geproduceerd door Pro. Zie Enterprise-grens hieronder.
Waarom het zo werkt
Sectie met titel “Waarom het zo werkt”Het ondertekeningsoppervlak geeft de signed-attributes-bytes door aan een SigningStrategy in plaats van een privésleutel vast te houden. Die ene beslissing is dragend. Een cloud-KMS, een uitgestelde externe ondertekenaar of een CAdES/XAdES-ingest-pad voldoen allemaal aan hetzelfde contract, dus de aanroepende code blijft identiek en het sleutelmateriaal komt nooit in NextPDF terecht. Het opsplitsen van de sessie in RemoteSigningSession::prepare() en RemoteSigningSession::complete() laat de handtekening asynchroon terugkomen, omdat de digest vaststaat voordat de sleutel ooit wordt bereikt. De tijdstempel wordt gekoppeld als een CMS unsigned attribuut, dus B-T blijft additief: de B-B signed digest, de SignerInfo-handtekeningwaarde en de /ByteRange blijven onaangeroerd. Elke naad is fail-closed, want een ondertekeningspad dat stilzwijgend degradeert is erger dan een dat stopt. Ontwerpachtergrond: Ondertekenen op schaal, zonder compromis.
API-oppervlak
Sectie met titel “API-oppervlak”| Type | Soort | Rol | Stabiliteit | Sinds |
|---|---|---|---|---|
RemoteSigningSession | class | Twee-fasige remote of asynchrone ondertekeningssessie | stable | 1.9.0 |
RemoteSigningConfig | class | Onveranderlijke sessieconfiguratie, inclusief PAdES-niveau | stable | 1.9.0 |
SequentialSigner | class | Multi-party sequentieel ondertekenen met DocMDP-ondersteuning | stable | 1.9.0 |
SigningStrategy | interface | Het ondertekeningsmechanismecontract dat een sessie aanroept | stable | 1.9.0 |
PadesWrapper | class | Wikkelt een bestaande CAdES- of XAdES-handtekening voor PAdES-embedding | stable | 1.9.0 |
KmsSignerInterface | interface (SPI) | Driver-contract van derden voor HSM en KMS | stable | 2.1.0 |
GenerationTimeMasker | class | Regelgestuurde masking toegepast voordat de pagina wordt geschreven | stable | 1.9.0 |
MaskingConfig / MaskingRule / MaskingMode | types | Masking-configuratie, -regel en vervangingsmodus | stable | 1.9.0 |
RemoteSigningConfig draagt een PAdES-niveauveld waarvan de enum de Core-SignatureLevel is. Het Pro-ondertekeningspad produceert de B-B-baseline en het B-T-niveau: configureer RemoteSigningConfig::default()->withLevel(SignatureLevel::PAdES_B_T) (of gebruik SequentialSigner::withTimestamping()) en lever een tijdstempelprovider aan, en de sessie voegt het RFC 3161 signature-time-stamp unsigned attribuut toe. De gereserveerde /Contents-ruimte voor B-T wordt automatisch verhoogd zodat het token past; een te krap geconfigureerde ruimte faalt gesloten met een getypeerde configuratiefout in plaats van af te kappen. Een niveau boven B-T dat in de config wordt gedragen (B-LT of B-LTA) is een forward-declared waarde waar Pro niet naar handelt; die langetermijnproducer resolveert tijdens runtime via het Core-contract en wordt geleverd in het nextpdf/enterprise-pakket.
Codevoorbeeld — Snelstart
Sectie met titel “Codevoorbeeld — Snelstart”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\RemoteSigningSession;use NextPDF\Pro\Security\Signing\SigningStrategy;
/** * Produce a signed PDF using any signing strategy. * * @param string $pdfWithPlaceholder PDF bytes with a signature placeholder. * @param SigningStrategy $strategy A cloud-KMS, deferred, or ingest strategy. * * @return string The signed PDF bytes. */function signWithStrategy(string $pdfWithPlaceholder, SigningStrategy $strategy): string{ $session = RemoteSigningSession::create($pdfWithPlaceholder);
$session->prepare( certDer: $strategy->getCertificateDer(), chainDer: $strategy->getCertificateChainDer(), algorithmOid: $strategy->getSignatureAlgorithmOid(), digestAlgorithm: $strategy->getDigestAlgorithm(), contentsHexStart: 0, contentsHexEnd: 0, );
return $session->complete($strategy);}De caller hangt af van het SigningStrategy-contract. Een cloud-KMS-strategie en een CAdES-ingest-strategie voldoen er beide aan, dus deze code verandert niet tussen strategieën.
Codevoorbeeld — Productie
Sectie met titel “Codevoorbeeld — Productie”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\SequentialSigner;use NextPDF\Pro\Security\Signing\SigningStrategy;use Psr\Log\LoggerInterface;
final readonly class ApprovalWorkflow{ public function __construct(private LoggerInterface $logger) {}
/** * Sign a PDF with two parties in sequence. * * @param string $pdfData The PDF bytes to sign. * @param SigningStrategy $approver The first-party strategy. * @param SigningStrategy $reviewer The second-party strategy. * * @return string The signed PDF bytes. */ public function run(string $pdfData, SigningStrategy $approver, SigningStrategy $reviewer): string { try { $result = SequentialSigner::create($pdfData) ->addSigner($approver, 'Approver', reason: 'Approved') ->addSigner($reviewer, 'Reviewer', reason: 'Reviewed') ->sign();
$this->logger->info('Sequential signing complete', [ 'signatures' => $result->signatureCount, ]);
return $result->pdfData; } catch (\Throwable $e) { $this->logger->error('Sequential signing failed', ['error' => $e->getMessage()]);
throw $e; } }}Elke ondertekenaar is een aparte incrementele revisie. Het catch-blok logt en gooit opnieuw; het slikt de fout niet in, wat het ondertekeningspad fail-closed houdt.
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Een geproduceerde handtekening is geen geverifieerde handtekening. Padvalidatie draait bij de verifier met de trust anchors van die verifier — RFC 5280 §6.1. De producer kan het resultaat niet claimen.
- Masking-detectie hangt af van de geconfigureerde regels. Een regelset die een waarde niet matcht, maskeert deze niet. De engine claimt niet dat alle gevoelige inhoud wordt gevonden.
- PII-detectie is alleen op de tekstlaag. Een gescande pagina zonder tekstlaag levert geen matches op. De tool overschrijft de gerenderde paginaglyphs niet.
- De CMS-structuur moet passen in de gereserveerde
Contents-ruimte. De B-B SignedData met een volledige certificaatketen heeft een grootte; dimensioneer de gereserveerde ruimte dienovereenkomstig, anders werpt de sessie een overflow-fout. - Een cloud-KMS-strategie hangt af van netwerkbereikbaarheid en providerbeschikbaarheid. Een netwerk- of providerfout werpt een getypeerde exception; de sessie produceert niet stilzwijgend een ongetekend document.
- OCSP
unknownis nietgood. Behandelunknownals een niet-bepaling — RFC 6960 §2.2.
Prestaties
Sectie met titel “Prestaties”Een software-handtekening kost enkele milliseconden. Een cloud-KMS-handtekening voegt één netwerkrondrit naar de provider toe. Een B-T-handtekening voegt één rondrit naar de geconfigureerde tijdstempelprovider toe bovenop de ondertekeningsbewerking. Het budget van 1500 ms wandtijd dekt één enkele B-B-handtekening met een remote provider op een warme verbinding. De masking-kosten schalen met het aantal regels en de tekstlengte. Het reproduceerbaarheidsprofiel is structural: de B-B signed attributes embedden het ondertekenmoment en een B-T-handtekening embedt daarnaast een tijdstempeltoken, waardoor twee runs verschillen in de signing-time- en timestamp-bytes terwijl de ondertekende structuur identiek is.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”Dit is een cryptografische grens, dus het dreigingsmodel is expliciet. Het byte range wordt door de engine berekend en wordt nooit van de caller geaccepteerd. Het ondertekeningspad is fail-closed: een primitieffout of een capaciteitskloof werpt een getypeerde exception en degradeert nooit stilzwijgend naar een zwakker algoritme. Een cloud-KMS-strategie is een integratiepunt, geen key store. Sleutelbescherming hangt af van sleutelverwerking, de geconfigureerde KMS en de implementatie; NextPDF Pro houdt de privésleutel voor een KMS-strategie niet vast. Pro werkt in een FIPS-compatibele modus wanneer geconfigureerd tegen een FIPS-gevalideerde KMS of HSM; NextPDF Pro is zelf geen FIPS-gevalideerde cryptografische module. Deze pagina betreft cryptografisch ondertekenen; elke normatieve bron is geparafraseerd en geen enkele is gereproduceerd.
Data residency en PII-mitigaties
Sectie met titel “Data residency en PII-mitigaties”De masking- en PII-oppervlakken draaien in-process. Geen documentinhoud verlaat de host voor masking of PII-detectie. Een cloud-KMS-strategie stuurt de signed-attributes-digest, niet het document, naar de provider voor de ondertekeningsbewerking. PII-detectie is patroongematcht op de geconfigureerde typen en verwijdert de onderliggende tekstobjecten voor de black-box-modus zoals getest; het is geen garantie van volledige verwijdering van persoonsgegevens en geen uitspraak over regelgevingsconformiteit.
Veilige telemetrie en logscrubbing
Sectie met titel “Veilige telemetrie en logscrubbing”De library werpt getypeerde exceptions met structurele meldingen. Het schrijft geen documentinhoud of gedetecteerde PII-waarden in exception-meldingen of logs. Een implementatie die rond het ondertekeningspad logt, moet de structurele velden loggen die in het productievoorbeeld worden getoond, niet de documentbytes.
FIPS-modusgedrag
Sectie met titel “FIPS-modusgedrag”Pro selecteert het algoritme uit het geconfigureerde handtekeningalgoritme en de strategie. Wanneer geconfigureerd tegen een FIPS-gevalideerde KMS of HSM, draait de cryptografische bewerking binnen die gevalideerde grens. NextPDF Pro voert zelf structurele assemblage en digest-berekening uit; het is geen FIPS-gevalideerde module en doet geen FIPS-certificeringsclaim.
Enterprise-grens
Sectie met titel “Enterprise-grens”NextPDF Pro produceert de B-B-baseline en het B-T-niveau. B-T voegt één RFC 3161 signature-time-stamp toe als een CMS unsigned attribuut op de handtekeningwaarde, berekend over de digitale handtekeningwaarde voor een ondertekenaar — ETSI EN 319 122-1 §5.3. NextPDF Pro implementeert dit volgens ETSI EN 319 122-1 §5.3, RFC 3161, RFC 5652 en RFC 5816; het is fixture-geverifieerd. NextPDF Pro claimt geen onafhankelijke ETSI EN 319 142-1-certificering en claimt geen juridische geldigheid van het document.
De B-LT- en B-LTA-niveaus zijn Enterprise-capaciteiten en worden niet geproduceerd door Pro. B-LT en B-LTA voegen een Document Security Store en documenttijdstempels toe voor validatie op lange termijn voor archivering — ETSI EN 319 142-2 §5.5. Een configuratie die een Document Security Store of de archiveringslus voor de lange termijn aanvraagt, resolveert die producer tijdens runtime via het Core-contract; die producer wordt geleverd in het nextpdf/enterprise-pakket. In een Pro-only-implementatie faalt het aanvragen van B-LT of B-LTA gesloten met een bericht dat de ontbrekende Enterprise-component benoemt. Pro produceert geen Document Security Store, geen VRI-woordenboek, geen documenttijdstempel en geen archiveringslus, en doet geen langetermijnvalidatie (LTV)-claim. Bewaring van hardwaresleutels via PKCS#11 en het FIPS 140-3 crypto-beleidsprofiel zijn eveneens Enterprise-capaciteiten.
| PAdES-niveau | Voegt toe | Producer-editie |
|---|---|---|
| B-B | CMS-handtekening met signed attributes | Core, Pro, Enterprise |
| B-T | Eén RFC 3161 signature-time-stamp unsigned attribuut op de handtekeningwaarde | Core, Pro, Enterprise |
| B-LT | Document Security Store met validatiemateriaal | Enterprise (nextpdf/enterprise) |
| B-LTA | Documenttijdstempels voor archiveringsgeldigheid | Enterprise (nextpdf/enterprise) |
Gedragscontract
Sectie met titel “Gedragscontract”- Masking past geconfigureerde regels toe voordat de pagina wordt geschreven en verwijdert de onderliggende tekstobjecten voor de black-box-modus zoals getest.
- PII-detectie extraheert de tekstlaag, past de geconfigureerde patronen toe en retourneert een gemaskeerde weergave en een aantal matches. Het overschrijft gerenderde glyphs niet.
- Remote ondertekenen is twee-fasig: prepare berekent de digest en bouwt signed attributes; complete assembleert de CMS en bedt deze in.
- Pro produceert de B-B-baseline en het B-T-niveau. Voor B-T voegt de sessie één RFC 3161 signature-time-stamp toe als een CMS unsigned attribuut op de handtekeningwaarde; de B-B signed digest en de
/ByteRangeblijven ongewijzigd. Een B-T-aanvraag zonder tijdstempelprovider, of met een te krap geconfigureerdeContents-ruimte, faalt gesloten met een getypeerde configuratiefout. Een aanvraag voor B-LT of B-LTA zonder het Enterprise-pakket faalt gesloten met een benoemde fout. - Een cloud-KMS-strategie ontvangt de signed-attributes-digest, niet het document, en retourneert de ruwe handtekeningbytes.
Conformiteit
Sectie met titel “Conformiteit”| Claim | Standaard | Clausule |
|---|---|---|
De CMS-handtekening wordt DER-gecodeerd opgeslagen in de Contents-vermelding van het handtekeningwoordenboek. | ISO 32000-2 | §12.8.1 |
| Het message-digest-berekeningsproces; signed attributes dragen content-type en message-digest. | RFC 5652 | §5.4 |
| De verifier mag niet vertrouwen op door de originator berekende digests; deze herberekent en vergelijkt onafhankelijk (handtekeningverificatieproces). | RFC 5652 | §5.6 |
| Een PAdES B-T signature-time-stamp is een unsigned attribuut dat één tijdstempeltoken draagt dat is berekend over de digitale handtekeningwaarde voor een ondertekenaar (Pro produceert B-T). | ETSI EN 319 122-1 | §5.3 |
De MessageImprint van het signature-time-stamp-id-aa-timeStampToken-token is een hash van de SignerInfo-handtekeningveldwaarde. | RFC 3161 | Appendix A |
Aan de verificatiezijde bindt NextPDF de MessageImprint van een signature-time-stamp aan de SignerInfo-handtekeningwaarde en faalt gesloten bij een mismatch, een ontbrekend/gedupliceerd token of een SHA-1-imprint (strikte verificatie, geen certificering). | RFC 3161 | Appendix A |
| Een B-T-tijdstempeltoken draagt een UTC-genTime die het moment is waarop het token is aangemaakt. | RFC 3161 | §2.4.2 |
| Certificeringspadvalidatie controleert basic constraints en padinvoer naar een trust anchor. | RFC 5280 | §6.1 |
| OCSP meldt certStatus als good, revoked of unknown. | RFC 6960 | §2.2 |
| B-LT en B-LTA voegen een Document Security Store en documenttijdstempels toe voor validatie op lange termijn (Enterprise-grens). | ETSI EN 319 142-2 | §5.5 |
Alle clausules zijn geparafraseerd. NextPDF reproduceert geen normatieve tekst. Raadpleeg de gepubliceerde standaarden voor de gezaghebbende formulering. NextPDF Pro implementeert PAdES B-T-ondertekeningsondersteuning volgens ETSI EN 319 122-1 §5.3 (signature-time-stamp), RFC 3161, RFC 5652 en RFC 5816, en het is fixture-geverifieerd. ETSI EN 319 142-1 (het deel met PAdES-baselineniveaus) valt buiten de geciteerde bewijsverzameling; NextPDF Pro claimt daarom geen onafhankelijke ETSI EN 319 142-1-certificering, -conformiteit of -compliance, en claimt geen juridische geldigheid van het document. Deze pagina beschrijft de geproduceerde structuur, de standaarden die de B-T-ondersteuning implementeert en de Enterprise B-LT/B-LTA-grens, niet een gecertificeerd conformiteitsniveau.
Publicatiegrens
Sectie met titel “Publicatiegrens”Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helper-klassen, mechanismetabellen, runbook-bestandsnamen en ticketprefixen vallen buiten scope.
Zie ook
Sectie met titel “Zie ook”- Security — Deep Reference — de deep reference voor dit Pro-security-oppervlak.
- Core signing — de CMS-ondertekenaar, RFC 3161-tijdstempel, RFC 5280-padvalidatie, OCSP en CRL.
- PAdES baseline-mapping — B-B, B-T, B-LT, B-LTA over edities heen.
- NextPDF Pro — het volledige Pro-feature-oppervlak.
- Core security — encryptie en het bredere handtekeningoppervlak.
- CMS · PAdES · RFC 3161 timestamp · KMS · DSS — woordenlijsttermen.