Enterprise editie
NextPDF Enterprise snelstart
In één oogopslag
Sectie met titel “In één oogopslag”Deze tutorial brengt je van een leeg project naar twee werkende Enterprise-resultaten. Eerst verifieer je een bestaande ondertekende PDF en lees je de MainIndication ervan. Daarna til je een ondertekend document naar PAdES B-LT met de long-term producer. Elke stap toont de precieze output of exception die je mag verwachten. NextPDF documenteert capaciteit, geen certificering: het heeft geen PAdES- of eIDAS-certificering en verleent die ook niet.
Deze capaciteit wordt geleverd in NextPDF Enterprise (nextpdf/enterprise) en activeert met een license envelope op Enterprise-niveau. Een deployment zonder die entitlement laadt de klassen van de capaciteit niet. Vergelijk edities en koop een licentie.
Vereisten
Sectie met titel “Vereisten”- Composer is geconfigureerd voor de private NextPDF-repository. Volg eerst Installeren en authenticeren.
- Je hebt je Enterprise license envelope, gedownload uit je account op app.getnextpdf.com. Licensing en activering legt uit wat de envelope is en waar die hoort.
- Voor stap 3 heb je een ondertekende PDF nodig om te verifiëren. Voor het B-LT-gedeelte heb je ook je signer certificate en netwerktoegang tot OCSP/CRL-responders nodig.
1. Installeren en activeren
Sectie met titel “1. Installeren en activeren”Vereis het Enterprise-package. Het is afhankelijk van nextpdf/core en nextpdf/pro, dus Composer haalt de hele stack binnen:
composer require nextpdf/enterprisecomposer show nextpdf/enterpriseAls composer show het package en de versie ervan afdrukt, is de installatie gelukt. Plaats nu de ondertekende license envelope op de plek waar je deployment die laadt, precies zoals Licensing en activering beschrijft. Alleen het package installeren verleent geen Enterprise-capaciteiten; de geactiveerde licentie selecteert de editie.
2. Je entitlement verifiëren
Sectie met titel “2. Je entitlement verifiëren”Vraag de entitlement-evaluator wat je licentie verleent. Je bootstrap verkrijgt de geverifieerde NextPDF\Enterprise\Licensing\LicenseKey tijdens de activering; geef die door:
<?phprequire __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Licensing\EntitlementEvaluator;use NextPDF\Enterprise\Licensing\LicenseKey;
/** @var LicenseKey|null $license The verified license from activation. */$result = (new EntitlementEvaluator())->evaluate($license);
echo 'status: ' . $result->status->value . PHP_EOL;echo 'edition: ' . ($result->edition?->value ?? 'none') . PHP_EOL;echo 'runtime: ' . ($result->runtimeAllowed ? 'allowed' : 'disabled') . PHP_EOL;Met een actieve Enterprise-licentie zie je:
status: activeedition: enterpriseruntime: allowedDe methode achter deze stap:
public function evaluate(?LicenseKey $license, ?DateTimeImmutable $now = null): EntitlementResultGooit of faalt met: hij gooit nooit. Een ontbrekende licentie retourneert een fail-closed EntitlementResult met EntitlementStatus::NoLicense en runtimeAllowed false (zie stap 4).
3. Eerste resultaat
Sectie met titel “3. Eerste resultaat”Een bestaande ondertekende PDF verifiëren
Sectie met titel “Een bestaande ondertekende PDF verifiëren”Extraheer de handtekening uit een ondertekende PDF en voer dan basis-AdES-validatie uit. De engine implementeert de validatieniveaus van ETSI EN 319 102-1; validateBasic() is de flow van clausule 5.2 — structuur, digest, handtekening-crypto en de certificaatketen:
<?phprequire __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Security\Validation\AdESValidationEngine;use NextPDF\Enterprise\Security\Validation\CmsSignatureDataExtractor;use NextPDF\Enterprise\Signature\SignatureExtractor;
$pdf = file_get_contents(__DIR__ . '/contract-signed.pdf');if ($pdf === false) { throw new RuntimeException('Could not read contract-signed.pdf');}
$signatures = (new SignatureExtractor())->extract($pdf);if ($signatures === []) { throw new RuntimeException('The PDF carries no signature dictionary.');}
$engine = new AdESValidationEngine(extractor: new CmsSignatureDataExtractor());$report = $engine->validateBasic( $signatures[0]['signedBytes'], // the exact /ByteRange-covered bytes $signatures[0]['contents'], // the DER CMS SignedData from /Contents);
echo $report->mainIndication->name . PHP_EOL;echo ($report->subIndication?->name ?? '(none)') . PHP_EOL;Voor een welgevormde handtekening die de basale structurele, digest-, cryptografische en ketencontroles doorstaat die in dit voorbeeld zijn geconfigureerd, zie je:
TOTAL_PASSED(none)MainIndication heeft precies drie gevallen: TOTAL_PASSED, TOTAL_FAILED en INDETERMINATE. De engine is fail-closed: een controle die hij niet positief kan vaststellen levert INDETERMINATE op, nooit een stille pass. Een pass hier is een validatie-uitkomst onder de controles van deze engine, geen trust- of certificeringsuitspraak — trust anchors en langetermijnbewijs horen bij de diepere niveaus op de verificatiepagina.
public function extract(string $pdfData): arrayGooit of faalt met: InvalidArgumentException als de input geen geldige PDF is. Een misvormde /ByteRange of /Contents levert lege strings op (fail-closed), nooit een positief resultaat.
public function validateBasic(string $signedData, string $signature): ValidationReportGooit of faalt met: hij gooit nooit bij een verificatiefout. Elk defect wordt afgebeeld op een ValidationReport-indicatie, bijv. HASH_FAILURE of SIG_CRYPTO_FAILURE.
Een PAdES B-LT produceren
Sectie met titel “Een PAdES B-LT produceren”Upgrade nu een vers ondertekend document naar B-LT. De long-term producer verzamelt de certificaatketen plus OCSP/CRL-bewijs en schrijft de Document Security Store (DSS). Hij zet de ondertekeningsronde voort die op de Handtekeningpagina wordt beschreven, die je de output buffer, het object registry en de handtekening-/Contents-hex geeft:
use NextPDF\Enterprise\Security\Ltv\LtvManager;use NextPDF\Security\Signature\CertificateInfo;use NextPDF\Security\Signature\SignatureLevel;
$certInfo = CertificateInfo::fromPkcs12('/secure/signer.p12', $p12Password);
// $httpClient is any PSR-18 client; it fetches OCSP responses and CRLs.$ltv = new LtvManager($certInfo, $httpClient, level: SignatureLevel::PAdES_B_LT);
// $buffer, $registry, and $signatureContentsHex come from the signing pass.$dssObjectNumber = $ltv->enableLtv($buffer, $registry, $signatureContentsHex);De retourwaarde is het DSS-objectnummer voor de /DSS-entry van de document catalog. De producer gebruikt standaard strikte intrekkingscontrole: ontbrekend intrekkingsmateriaal gooit een exception in plaats van stilzwijgend een hol “B-LT”-bestand uit te geven.
public function enableLtv(BinaryBuffer $buffer, ObjectRegistry $registry, string $signatureContentsHex): intGooit of faalt met: NextPDF\Enterprise\Security\Ltv\LtvException wanneer ketenvalidatie faalt, wanneer het certificaat is ingetrokken, of wanneer intrekkingsmateriaal ontbreekt onder de strikte standaardinstelling.
4. Wanneer er iets faalt
Sectie met titel “4. Wanneer er iets faalt”status: no_license — de envelope is niet geladen
Sectie met titel “status: no_license — de envelope is niet geladen”Stap 2 drukt status: no_license en runtime: disabled af, en het resultaat draagt de waarschuwing No license configured. Enterprise runtime is disabled. Install a license or purchase one at https://nextpdf.dev/pricing. Een entitlement-gated aanroep gooit vervolgens NextPDF\Accelerator\Exception\SpectrumAuthenticationException met code SPEC-LIC-001, bijv. Capability '...' requires a valid license. Oplossing: plaats en activeer de envelope volgens Licensing en activering, en voer stap 2 opnieuw uit.
InvalidArgumentException: Input does not start with %PDF header
Sectie met titel “InvalidArgumentException: Input does not start with %PDF header”SignatureExtractor::extract() heeft iets ontvangen dat geen PDF is — een verkeerd pad, een lege read, of een gecomprimeerde download. Controleer het bestand dat je hebt geladen. Een lege $signatures-lijst is iets anders: het bestand is een PDF, maar draagt geen /Type /Sig-dictionary, dus er valt niets te verifiëren.
LtvException: Strict revocation: LTV warning: no revocation data for certificate at chain position 0
Sectie met titel “LtvException: Strict revocation: LTV warning: no revocation data for certificate at chain position 0”enableLtv() kon geen OCSP-response of CRL verkrijgen voor een ketencertificaat, en de strikte standaardinstelling weigert een B-LT-claim te schrijven zonder bewijs. Controleer de bereikbaarheid van de responder vanaf de host, of geef enforcementMode: RevocationEnforcementMode::PERMISSIVE alleen door als je uitdrukkelijk een warn-only run accepteert — bestempel dergelijke output nooit als B-LT voor productie- of compliance-workflows, tenzij het ontbrekende intrekkingsbewijs uitdrukkelijk wordt geaccepteerd en gedocumenteerd. Gerelateerd: B-LTA aanvragen zonder een TSA-client faalt met LtvException: TSA client required for document timestamps.
Waar je hierna heen kunt
Sectie met titel “Waar je hierna heen kunt”- Handtekening: PAdES B-LT / B-LTA, DSS, document timestamps — het volledige producergedrag, de ordeningsregels en de archiveringsloop.
- Handtekeningverificatie — tijdgebaseerde en langetermijnvalidatie, trust anchors, archiveringsketens.
- Licensing — NextPDF Enterprise — entitlement-states, respijt, capability-gating.
- NextPDF Enterprise module-index — al het overige dat de editie levert.