Enterprise sürüm
Toplu imza doğrulama
Bir bakışta
“Bir bakışta” başlıklı bölümNextPDF Enterprise, tek bir çağrıda birçok PDF belgesindeki dijital imzaları doğrular. NextPDF\Enterprise\Signature\BatchSignatureValidator::validate() bir belge listesi alır ve bir BatchValidationReport döndürür. Her imza aynı fail-closed işlem hattından geçer: imzalanmış bayt aralığı üzerinde kriptografik CMS kimlik doğrulaması, güven bağlı sertifika zinciri doğrulaması ve OCSP/CRL iptal denetimi. Rapor, belge başına ve imza başına ayrıntı taşır — CertChainStatus, RevocationStatus, TimestampStatus — böylece uyumluluk araçları her kararı kaydedilmiş kanıtından yeniden türetebilir.
Karar modeli bilinçli olarak katıdır. Bir imza yalnızca tüm kanıtlar olumlu şekilde kanıtlandığında Valid olur. Eksik iptal kanıtı asla Valid değil, Indeterminate verir. Bu sayfa, toplu düzenleyiciyi ve sonuç türlerini kapsar. Tek belgeli AdES doğrulama tarafı İmza doğrulama sayfasında belgelenmiştir. Uzun vadeli doğrulama materyalinin gömülmesi Arşiv sayfasında belgelenmiştir.
Kullanılabilirlik ve lisanslama
“Kullanılabilirlik ve lisanslama” başlıklı bölümBu yetenek NextPDF Enterprise (nextpdf/enterprise) ile birlikte gelir ve bir Enterprise katmanı lisans zarfıyla etkinleşir. Bu yetkiye sahip olmayan bir dağıtım, yeteneğin sınıflarını yüklemez. Sürümleri karşılaştırın ve lisans alın.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/enterprisenextpdf/premium metapaketi de Enterprise paketini çözer. Etkinleştirme, Enterprise lisans zarfınızı kullanır; bkz. Lisanslama ve etkinleştirme. Toplu türler NextPDF\Enterprise\Signature altında otomatik yüklenir. Motor temel çizgisinin ötesinde bir PHP uzantısı gerekmez.
Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümvalidate() işlevine tek bir çağrı, DocumentSignatureInput değerlerinden oluşan bir listeyi işler. Her giriş, bir belge tanımlayıcısı, ham PDF baytları ve isteğe bağlı PEM kodlu güven çıpaları taşır. Doğrulayıcı, her belgenin imza sözlüklerini çıkarır ve imza başına üç aşama çalıştırır.
Aşama 1 — kriptografik kimlik doğrulama. /Contents içinden gelen ayrık CMS/PKCS#7 blobu, /ByteRange kapsamındaki baytlar üzerinde doğrulanır. Doğrulayıcı, içerik özetini kendisi yeniden hesaplar ve bunu messageDigest imzalı özniteliğiyle karşılaştırır. Üreticinin sağladığı bir özete asla güvenmez (RFC 5652 §5.6). İmza değeri doğrulanmalı ve imzalama sertifikası CMS’ye bağlı olmalıdır. Eksik veya bozuk /Contents ya da /ByteRange, ayrıştırılamayan bir CMS, bir özet uyuşmazlığı ya da başarısız bir imza denetimi hepsi fail-closed şekilde başarısız olur. SHA-1 altında doğrulanan bir imza zayıf olarak değerlendirilir ve asla tam bir geçiş değildir.
Aşama 2 — zincir doğrulaması ve güven çıpalama. CMS’den kurtarılan imzalayan zinciri, olası sertifikasyon yolu olarak doğrulanır. Sağladığınız trustedCerts, RFC 5280 §6.1.1 anlamında güven çıpası girdisidir: zincir uç noktası, sağlanan bir çıpayla DER SHA-256 parmak izine göre eşleşmelidir. Uç noktası yapılandırılmış bir çıpa olmayan yapısal olarak tutarlı bir zincir asla güvenilir olarak raporlanmaz. Kullanılabilir çıpa olmadığında yalnızca yapısal karar raporlanır ve CertChainStatus::$trusted false olarak kalır.
Aşama 3 — iptal. İptal, kimlik doğrulamasından sonra kurtarılan zincir üzerinde çalışır ve iptal denetiminin başarılı yol doğrulamasını izlediği ETSI EN 319 102-1 modelini yansıtır (madde 5.2.6.2). OCSP birincildir: yalnızca kriptografik olarak doğrulanmış bir yanıt, Good veya Revoked olarak sayılır. CRL yolu yedektir ve liste tazeliğini onaylar. Hiçbir istemci yapılandırılmadığında durum unavailable olur.
İmza başına karar bir SignatureValidationStatus’tur. Sınıflandırma, imza başına ayrıntı düzeyinde ETSI EN 319 102-1 durum modelini (TOTAL-PASSED / TOTAL-FAILED / INDETERMINATE) yansıtır:
| Kanıt | Karar |
|---|---|
| Sertifika iptal edildiği doğrulandı | Invalid (kesin, diğer denetimlerden bağımsız) |
| CMS kimlik doğrulaması başarısız, imzalayan materyali kurtarılamadı | Error |
| CMS kimlik doğrulaması başarısız, imzalayan materyali mevcut | Invalid |
| Kimliği doğrulandı, ancak zincir doğrulanmıyor | Invalid (veya zincir yoksa Error) |
| Kimliği doğrulandı ve zincir geçerli, ancak doğrulanmış güven çıpası yok | Indeterminate |
| Kimliği doğrulandı, zincir geçerli, güvenilir, ancak kesin iptal-edilmemişlik yok | Indeterminate |
| Yukarıdakilerin tümü olumlu şekilde kanıtlandı | Valid |
Kesin iptal-edilmemişlik kuralı. “İptal edildiği kanıtlanmadı”, “iptal edilmediği kanıtlandı” ile aynı şey değildir. Bir Valid kararı en az bir Good iptal sonucu gerektirir. Doğrulanmış-iyi bir OCSP yanıtı kesin biçimdir: imzalayan sertifikasının kendi durumunu ileri sürer. Kriptografik olarak kabul edilmiş, taze bir CRL de bu uygulamada geçidi karşılar, ancak yalnızca bir tazelik-ve-bütünlük tasdiki olarak — yol, seri-başına girdileri ayrıştırmaz, bu nedenle seri-başına iptal güvencesi sağlamaz ve asla olumlu bir revoked kararı vermez. Olumlu iptal tespitinin önemli olduğu her yerde OCSP’yi yapılandırın: yalnızca CRL kullanan bir dağıtım, iptal edilmiş bir sertifikayı Invalid olarak ortaya çıkarmaz. Hem OCSP hem de CRL sonuçları Unknown veya Unavailable olduğunda iptal durumu belirsizdir ve karar Indeterminate olur. Bu, ETSI EN 319 102-1’i izler: kullanılamayan iptal durumu bilgisi asla geçiş değil, INDETERMINATE ile sonuçlanır (madde 5.1.3, TRY_LATER). Bu, 3.1.0’da geriye dönük uyumluluk etkisi olan bir davranış sıkılaştırmasıdır: daha önceki sürümler kesin iptal kanıtı olmadan Valid raporlayabiliyordu. Hiçbir OCSP veya CRL istemcisi yapılandırmayan dağıtımlar, artık daha önce Valid gördükleri yerde yaygın olarak Indeterminate görüyor.
İki sınır bu yeteneği dürüstçe çerçeveler. İlk olarak, toplu doğrulayıcı gömülü zaman damgası belirteçlerini değerlendirmez: toplu sonuçlardaki TimestampStatus her zaman yok durumundadır. RFC 3161 zaman damgası değerlendirmesi tek belgeli doğrulama tarafına aittir; bkz. İmza doğrulama. İkinci olarak, bu sayfa salt okunur doğrulamadır. Uzun vadeli geçerlilik için DSS/VRI materyalinin gömülmesi Arşiv yeteneğidir.
Neden bu şekilde çalışıyor
“Neden bu şekilde çalışıyor” başlıklı bölümYük taşıyan karar, fail-closed bir karar üreticisidir. Valid yalnızca üç eksenin tümündeki olumlu kanıttan üretilir: kriptografik kimlik doğrulama, güven bağlı bir zincir ve kesin iptal-edilmemişlik. Kanıtlanmamış herhangi bir şey, bir geçişe varsayılan olmak yerine Indeterminate’e düşer; bu, eksik iptal materyali için EN 319 102-1 duruşudur. Toplu iş hacmi asla titizliği geri satın almaz: toplu katman, tek bir belge için kullanılan aynı denetlenmiş CMS doğrulayıcısı üzerindeki düzenlemedir, bu nedenle 1,000 belgelik bir çalıştırma aynı kriptografiyi uygular. Rapor ayrıca kanıtı karardan ayırır — CertChainStatus ve RevocationStatus, her kararın dayandığı girdileri kaydeder, böylece bir denetçi bunu daha sonra yeniden türetebilir.
Tasarım arka planı: Ölçekte imzalama, ödün vermeden.
API yüzeyi
“API yüzeyi” başlıklı bölümAşağıdaki tüm semboller nextpdf/enterprise 3.1.0’da genel API’dir.
BatchSignatureValidator
“BatchSignatureValidator” başlıklı bölümfinal class BatchSignatureValidator{ public function __construct( ?SignatureExtractor $extractor = null, ?CertificateChainValidator $chainValidator = null, private readonly ?OcspClient $ocspClient = null, private readonly ?CrlFetcher $crlFetcher = null, ?CmsSignatureDataExtractor $cmsExtractor = null, private readonly ClockInterface $clock = new SystemClock(), )
public function validate(array $inputs): BatchValidationReport}Şu durumlarda fırlatır veya başarısız olur: giriş listesi boşsa validate(), \InvalidArgumentException fırlatır ve toplu iş 1,000 belgeyi aştığında \OverflowException fırlatır. Ayrıştırılabilir bir PDF olmayan bir belge fırlatmaz; belge başına bir Error sonucu olur. $clock, CRL tazelik kararı için kullanılan bir PSR-20 Psr\Clock\ClockInterface’tir, bu nedenle kararlar dondurulmuş bir test saati altında belirlenimcidir.
DocumentSignatureInput
“DocumentSignatureInput” başlıklı bölümfinal readonly class DocumentSignatureInput{ public string $documentId;
public function __construct( string $documentId, public string $pdfData, public array $trustedCerts = [], )}Şu durumlarda fırlatır veya başarısız olur: $documentId boş bir dizeyse \InvalidArgumentException. $trustedCerts, PEM kodlu güven çıpası sertifikalarından oluşan bir listedir.
BatchValidationReport
“BatchValidationReport” başlıklı bölümfinal readonly class BatchValidationReport{ public function __construct( public array $documents, public int $totalDocuments, public int $totalSignatures, public int $totalValid, public int $totalInvalid, public float $durationMs, )
public function allValid(): bool
public function hasDocumentsWithoutSignatures(): bool
public function toJson(?CertPiiGuard $piiGuard = null): string}Şu durumlarda fırlatır veya başarısız olur: kodlama başarısız olursa toJson(), \JsonException fırlatır. allValid() yalnızca imzalar olduğunda ve hiçbiri geçerli olmayan durumda değilken true olur. Varsayılan olarak toJson(), imzalayan adını, kök vereni, TSA adını ve zincir-sorunu tanılamalarını maskeleyen varsayılan-gizlilikli bir NextPDF\Enterprise\Signature\Eidas\CertPiiGuard uygular; korumanın API’si için bkz. eIDAS güvence seviyeleri.
DocumentValidationResult ve DocumentValidationStatus
“DocumentValidationResult ve DocumentValidationStatus” başlıklı bölümfinal readonly class DocumentValidationResult{ public function __construct( public string $documentId, public DocumentValidationStatus $status, public array $signatures, public int $validCount, public int $invalidCount, )
public function hasSignatures(): bool
public function totalSignatures(): int}enum DocumentValidationStatus: string{ case AllValid = 'all_valid'; case SomeInvalid = 'some_invalid'; case AllInvalid = 'all_invalid'; case NoSignatures = 'no_signatures'; case Error = 'error';}Şu durumlarda fırlatır veya başarısız olur: hiçbiri. Değişmez değer nesnesi ve destekli enum.
SignatureValidationResult ve SignatureValidationStatus
“SignatureValidationResult ve SignatureValidationStatus” başlıklı bölümfinal readonly class SignatureValidationResult{ public function __construct( public SignatureValidationStatus $status, public CertChainStatus $certChain, public TimestampStatus $timestamp, public RevocationStatus $revocation, public string $signer, public string $level = '', public string $subFilter = '', public string $reason = '', )
public function isValid(): bool}enum SignatureValidationStatus: string{ case Valid = 'valid'; case Invalid = 'invalid'; case Indeterminate = 'indeterminate'; case Error = 'error';}Şu durumlarda fırlatır veya başarısız olur: hiçbiri. $signer, kimlik doğrulaması geçtiğinde CMS ile doğrulanmış sertifika öznesidir, aksi halde boş dizedir. $level, bir AdES uygunluk belirlemesi değil, SubFilter’dan türetilmiş bir etikettir (örneğin ETSI.CAdES.detached için B-B).
CertChainStatus
“CertChainStatus” başlıklı bölümfinal readonly class CertChainStatus{ public function __construct( public bool $valid, public bool $trusted, public int $chainLength, public string $rootIssuer, public array $issues = [], )
public function hasIssues(): bool}Şu durumlarda fırlatır veya başarısız olur: hiçbiri. $trusted, yalnızca doğrulanmış bir güven çıpası üyeliği isabetinde ayarlanır, asla çıpa listesinin boş olmamasından değil.
RevocationStatus ve RevocationCheckResult
“RevocationStatus ve RevocationCheckResult” başlıklı bölümfinal readonly class RevocationStatus{ public function __construct( public RevocationCheckResult $ocspStatus, public RevocationCheckResult $crlStatus, public bool $isRevoked, public ?DateTimeImmutable $revocationDate = null, )
public static function unavailable(): self
public function hasConclusiveGood(): bool}enum RevocationCheckResult: string{ case Good = 'good'; case Revoked = 'revoked'; case Unknown = 'unknown'; case Unavailable = 'unavailable';}Şu durumlarda fırlatır veya başarısız olur: gösterilen üyelerden hiçbiri. Sınıf ayrıca kanıt denetimli statik fabrikalar (good(), revoked(), fromResults()) sunar; bunlar, iddia edilen durum OCSP/CRL kanıtıyla çeliştiğinde \InvalidArgumentException fırlatır — iptal edilmiş bir sonuç asla iptal-edilmemiş olarak üretilemez ya da tersi. hasConclusiveGood(), yalnızca en az bir denetimin Good olduğu iptal-edilmemiş bir durum için true olur.
TimestampStatus
“TimestampStatus” başlıklı bölümfinal readonly class TimestampStatus{ public function __construct( public bool $present, public bool $valid, public ?DateTimeImmutable $timestampTime = null, public string $tsaName = '', public array $issues = [], )
public static function absent(): self}Şu durumlarda fırlatır veya başarısız olur: hiçbiri. Toplu sonuçlarda bu her zaman absent() durumudur; bkz. Uç durumlar ve tuzaklar.
Kod örneği — Hızlı başlangıç
“Kod örneği — Hızlı başlangıç” başlıklı bölümBir belgeyi doğrulayın ve raporu okuyun. Bu örnek, imzasız bir PDF kullanır, bu nedenle çıktı belirlenimcidir.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Signature\BatchSignatureValidator;use NextPDF\Enterprise\Signature\DocumentSignatureInput;
// A minimal, unsigned PDF: the validator reports it as no_signatures.$unsigned = "%PDF-1.7\n1 0 obj\n<< /Type /Catalog >>\nendobj\ntrailer\n<< /Root 1 0 R >>\n%%EOF\n";
$validator = new BatchSignatureValidator();
try { $report = $validator->validate([ new DocumentSignatureInput(documentId: 'doc-001', pdfData: $unsigned), ]);} catch (\InvalidArgumentException $e) { // Empty input list, or an empty documentId. echo 'Rejected: ' . $e->getMessage() . "\n"; exit(1);}
echo 'Documents: ' . $report->totalDocuments . "\n";echo 'Signatures: ' . $report->totalSignatures . "\n";
foreach ($report->documents as $doc) { echo $doc->documentId . ': ' . $doc->status->value . "\n";}
echo 'All valid: ' . ($report->allValid() ? 'yes' : 'no') . "\n";echo 'Unsigned documents: ' . ($report->hasDocumentsWithoutSignatures() ? 'yes' : 'no') . "\n";Beklenen çıktı:
Documents: 1Signatures: 0doc-001: no_signaturesAll valid: noUnsigned documents: yesBurada allValid()’in no raporladığına dikkat edin: en az bir imza ve geçerli olmayan sonuç bulunmaması gerekir, bu nedenle boş bir imza kümesi asla sessizce geçmez.
Kod örneği — Üretim
“Kod örneği — Üretim” başlıklı bölümİptal istemcileri, güven çıpaları, toplu parçalama ve PII korumalı bir JSON raporuyla imzalı sözleşmelerden oluşan bir dizini doğrulayın.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Security\Ltv\CrlFetcher;use NextPDF\Enterprise\Security\Ltv\OcspClient;use NextPDF\Enterprise\Security\Ltv\OcspResponseCache;use NextPDF\Enterprise\Signature\BatchSignatureValidator;use NextPDF\Enterprise\Signature\DocumentSignatureInput;use NextPDF\Enterprise\Signature\SignatureValidationStatus;
// Any PSR-18 client works; Guzzle shown here.$httpClient = new \GuzzleHttp\Client(['timeout' => 10]);
// Revocation clients make a conclusive non-revoked (Good) result reachable.// Without them, every verdict tops out at Indeterminate. The response cache// lets repeat signers across the batch resolve without extra network calls.$validator = new BatchSignatureValidator( ocspClient: new OcspClient($httpClient, cache: new OcspResponseCache()), crlFetcher: new CrlFetcher($httpClient),);
// Trust anchors are an input: the chain terminus must match one of these.$anchors = [(string) file_get_contents('/etc/nextpdf/trust/enterprise-root.pem')];
$inputs = [];foreach (glob('/var/contracts/signed/*.pdf') ?: [] as $path) { $inputs[] = new DocumentSignatureInput( documentId: basename($path), pdfData: (string) file_get_contents($path), trustedCerts: $anchors, );}
$exit = 0;
// One call is capped at 1,000 documents; chunk larger runs.foreach (array_chunk($inputs, 1000) as $batch) { try { $report = $validator->validate($batch); // Signer PII is redacted by default in the serialized report. file_put_contents('/var/log/nextpdf/batch-report.jsonl', $report->toJson() . PHP_EOL, FILE_APPEND); // one JSON document per line } catch (\InvalidArgumentException | \OverflowException $e) { fwrite(STDERR, 'Batch rejected: ' . $e->getMessage() . "\n"); exit(2); } catch (\JsonException $e) { fwrite(STDERR, 'Report encoding failed: ' . $e->getMessage() . "\n"); exit(3); }
foreach ($report->documents as $doc) { foreach ($doc->signatures as $sig) { if ($sig->status !== SignatureValidationStatus::Valid) { $exit = 1; fwrite(STDERR, sprintf( "%s: %s (chain trusted: %s, revoked: %s)\n", $doc->documentId, $sig->status->value, $sig->certChain->trusted ? 'yes' : 'no', $sig->revocation->isRevoked ? 'yes' : 'no', )); } } }}
exit($exit);Beklenen çıktı (iptal kanıtı kullanılamayan bir belge için stderr; diğer satırlar girdilerinize göre değişir):
contract-0042.pdf: indeterminate (chain trusted: yes, revoked: no)JSON raporu, imzalayan kimlik alanlarını varsayılan CertPiiGuard aracılığıyla serileştirir, bu nedenle imza başına bir giriş şöyle görünür (alıntı, örnekleyici):
{ "status": "indeterminate", "signer": "[REDACTED]", "level": "B-B", "subFilter": "ETSI.CAdES.detached"}Uç durumlar ve tuzaklar
“Uç durumlar ve tuzaklar” başlıklı bölüm- Boş bir giriş listesi
\InvalidArgumentExceptionfırlatır; tek bir çağrıda 1,000’den fazla belge\OverflowExceptionfırlatır. Üretim örneğindeki gibi daha büyük çalıştırmaları parçalayın. - Daha önceki sürümlerden yükseltme: hiçbir OCSP veya CRL istemcisi yapılandırılmadığında iptal
unavailableolur, bu nedenle hiçbir imzaValid’e ulaşamaz. Daha önceki sürümler buradaValidraporluyordu; 3.1.0Indeterminateraporlar (bkz. Kavramsal genel bakış). - Belge düzeyindeki sayaçlar katıdır: yalnızca
Valid,validCount’u artırır.Invalid,IndeterminateveErrorhepsiinvalidCount’u artırır. Bu nedenle tek imzasıIndeterminateolan bir belgeall_invalidraporlar. Ayrım önemli olduğunda imza başınastatusüzerinde geçit uygulayın. - OCSP denetimi yalnızca kurtarılan zincir en az iki sertifikaya sahip olduğunda çalışır, çünkü sorgu verene ihtiyaç duyar. Tek sertifikalı bir zincir, CRL yoluna ya da
unavailable’a düşer. crlStatustoplu sonuçlarda aslarevokedraporlamaz. CRL yedeği yalnızca liste tazeliğini onaylar; yetkili bir iptal sonucu OCSP’den gelir.timestamptoplu sonuçlarda her zamanabsent()’tir. Toplu doğrulayıcı gömülü RFC 3161 belirteçlerini değerlendirmez; zaman damgası değerlendirmesi için İmza doğrulama kullanın.signer, kimlik doğrulaması başarısız olduğunda boştur. Ayarlandığında, CMS ile doğrulanmış sertifikanın özne CN’si (veya O’su) olur — asla imza sözlüğündeki kimliği doğrulanmamış/Namedizesi değil.trustedCertsgirdileri PEM sertifikaları olmalıdır. Boş veya bozuk bir çıpa listesi,trusted: falseile yalnızca yapısal bir zincir kararı verir ve kararıIndeterminate’te sınırlar.- Bir PDF başlığıyla başlamayan baytlar, sıfır imzayla belge başına bir
errordurumu üretir — istisna yok. toJson()varsayılan olarak PII’yi redakte eder.new CertPiiGuard(disclosePii: true)’yi yalnızca imzalayan kimliğini işlemek için belgelenmiş bir yasal dayanağa sahip olduğunuz yerde geçirin.
Güvenlik notları
“Güvenlik notları” başlıklı bölüm- Fail-closed karar üreticisi.
Validşunların tümünü gerektirir:/ByteRangeözeti üzerinde doğrulanmış CMS kimlik doğrulaması, geçerli bir zincir, doğrulanmış güven çıpası üyeliği ve kesin iptal-edilmemiş bir durum. Kanıtlanmamış her denetim kararı düşürür; hiçbir şey varsayılan olarak geçiş olmaz. - Kimlik aklama yok. Raporlanan imzalayan, kriptografik olarak bağlı sertifika öznesidir.
/Namegirdisi saldırgan denetimli meta veridir ve asla imzalayan olarak ortaya çıkarılmaz. - Zayıf algoritmalar asla geçmez. Doğrulanan bir SHA-1 imzası yine de geçerli değil olarak raporlanır; zayıf bir özet altındaki kriptografik geçerlilik tam bir geçişe aklanmaz.
- Güven bir girdidir, bir çıkarım değil. Sağladığınız çıpalar, DER SHA-256 parmak izine göre zincir uç noktasıyla eşleştirilir (RFC 5280 §6.1.1). Bir zincirin kendi içinde tutarlı olması ya da tek başına boş olmayan bir çıpa listesi asla güven kurmaz.
- İptal kesindir. Doğrulanmış bir iptal ifadesi, diğer her denetimden bağımsız olarak
Invalid’i zorlar; kullanılamayan kanıtIndeterminate’i zorlar. - Serileştirilmiş çıktıda varsayılan gizlilik.
toJson(), siz devre dışı bırakmadıkça imzalayan CN’sini, kök veren DN’sini, TSA adını ve zincir-sorunu tanılamalarını maskeler ve serileştirme sınırında GDPR Madde 5(1)(c) veri minimizasyonunu uygular. - Belirlenimci zaman. CRL tazelik kararı, ana bilgisayar duvar saatini değil, enjekte edilen PSR-20 saatini okur, bu nedenle iptal kararları test altında yeniden üretilebilirdir.
Uygunluk
“Uygunluk” başlıklı bölümNextPDF Enterprise, ETSI EN 319 102-1 (üç değerli doğrulama durumu modeli ve kullanılamayan iptal bilgisinin INDETERMINATE verdiği kural), RFC 5652 §5.6 (doğrulayıcı tarafında özet yeniden hesaplama) ve RFC 5280 §6.1 (yol doğrulamasına dayanan taraf girdileri olarak güven çıpaları) tarafından bilgilendirilen davranışı uygular. Destek uygunluk değildir ve uygunluk sertifikasyon değildir. NextPDF hiçbir sertifikasyona sahip değildir ve hiçbirini vermez. Toplu doğrulayıcı nitelikli bir doğrulama hizmeti değildir ve durumları, tam bir madde 5 doğrulama sürecinden gelen TOTAL-PASSED/TOTAL-FAILED/INDETERMINATE göstergeleri değil, EN 319 102-1 sınıflandırmasıyla hizalanmış mühendislik kararlarıdır. Özellikle, toplu mod hiçbir var-oluş kanıtı veya zaman damgası işlemesi gerçekleştirmez; tek belgeli doğrulama tarafı o alanı kapsar.
FIPS modu davranışı
“FIPS modu davranışı” başlıklı bölümToplu doğrulayıcı hiçbir FIPS modu ilkesine başvurmaz ve FIPS modunu etkinleştirmek toplu kararları değiştirmez. Doğrulama tarafı algoritma işleme sabit ve fail-closed’dur: zayıf (SHA-1) imzalar, FIPS modu olsun ya da olmasın asla Valid raporlanmaz. Enterprise FIPS modu ilkesi, FIPS 140 — Derin Referans içinde belgelenen imzalama/oluşturma tarafına geçit uygular. FIPS 140 desteği bir yetenek ifadesidir, bir doğrulama ya da sertifikasyon iddiası değil.
Davranış sözleşmesi
“Davranış sözleşmesi” başlıklı bölümvalidate(), boş bir liste için\InvalidArgumentExceptionve 1,000 belgenin üzerinde\OverflowExceptionfırlatır. Bozuk belgeler asla fırlatmaz; belge başınaerrorsonuçları üretirler.Validşu bileşimi gerektirir: CMS kriptografik olarak doğrulanmış, zincir geçerli, güven çıpası üyeliği doğrulanmış veRevocationStatus::hasConclusiveGood()doğru.- İptal edildiği doğrulanmış bir sertifika kesindir: diğer tüm kanıtlardan bağımsız olarak karar
Invalidolur. - Her iki iptal denetiminin de
Unknown/UnavailableolmasıIndeterminateanlamına gelir, aslaValiddeğil (3.1.0 sıkılaştırması, geriye dönük uyumluluk etkisi). - Doğrulanmış güven çıpası olmayan, kimliği doğrulanmış, zincir geçerli bir imza
Indeterminate’tir — özgün, güven kurulmamış. signer, CMS ile doğrulanmış özne veya boş dizedir;/Namegirdisi asla kullanılmaz.timestamptoplu sonuçlarda her zaman yok durumundadır.validCountyalnızcaValid’i sayar; diğer tüm durumlarinvalidCount’a sayılır ve belge durumu bu sayaçlardan toplanır.toJson(), açıkça bir koruma geçirilmedikçe varsayılan-gizlilikliCertPiiGuard’ı uygular.- Rapor toplamları, belge başına sonuçlar üzerinden kesin toplamlardır;
durationMs, toplu iş için ölçülen duvar saati süresidir.
Core yedeği
“Core yedeği” başlıklı bölümNextPDF Core’un Güvenlik / İmzalama modülü üretici taraftır: CMS imzaları oluşturur, RFC 3161 zaman damgaları uygular ve imzalama zamanında gömdüğü materyal için zincirleri ve iptali doğrular. Core, doğrulama tarafında hiçbir toplu düzenleyici sunmaz: çok belgeli rapor yok, toplu durum sınıflandırması yok, üçüncü taraf belgeler için OCSP/CRL iptal kararları yok ve PII korumalı rapor serileştirmesi yok. Yalnızca Core ile her imzayı kendiniz çıkarır ve doğrular, kendi raporlamanızı oluşturursunuz. Enterprise tek belgeli doğrulama tarafı (İmza doğrulama) ve bu toplu düzenleyici o katmanı sağlar.
Yayın sınırı
“Yayın sınırı” başlıklı bölümBu sayfa yalnızca dışarıdan gözlemlenebilir davranışı ve desteklenen genel API yüzeyini belgeler. Dahili ad alanı yolları, yardımcı sınıflar, mekanizma tabloları, runbook dosya adları ve bilet önekleri kapsam dışıdır.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölüm- İmza doğrulama — zaman damgası ve arşiv zinciri doğrulaması dahil, tek belgeli AdES/PAdES kriptografik doğrulama tarafı
- Arşiv — uzun vadeli geçerlilik için DSS/VRI materyali ve belge zaman damgalarını gömme
- Doğrulama — salt okunur yapısal ilke denetimleri, kriptografi yok
- İmza — Derin Referans — İmza modülünün derin referansı
- eIDAS güvence seviyeleri —
CertPiiGuardAPI’si ve güvence seviyesi eşlemesi - Ölçekte imzalama, ödün vermeden — yüksek hacimli imzalama ve doğrulama tasarımı üzerine Insider makalesi
- Bir imzayı doğru şekilde doğrulama — fail-closed doğrulamanın neden önemli olduğu üzerine Insider makalesi