İçeriğe geç
getnextpdf.com

Enterprise sürüm

Toplu imza doğrulama

NextPDF 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.

Bu 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.

Terminal window
composer require nextpdf/enterprise

nextpdf/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.

validate() 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ıtKarar
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 mevcutInvalid
Kimliği doğrulandı, ancak zincir doğrulanmıyorInvalid (veya zincir yoksa Error)
Kimliği doğrulandı ve zincir geçerli, ancak doğrulanmış güven çıpası yokIndeterminate
Kimliği doğrulandı, zincir geçerli, güvenilir, ancak kesin iptal-edilmemişlik yokIndeterminate
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.

Yü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.

Aşağıdaki tüm semboller nextpdf/enterprise 3.1.0’da genel API’dir.

final 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.

final 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.

final 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üm
final 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üm
final 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).

final 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.

final 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.

final 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.

Bir belgeyi doğrulayın ve raporu okuyun. Bu örnek, imzasız bir PDF kullanır, bu nedenle çıktı belirlenimcidir.

batch-quick-start.php
<?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: 1
Signatures: 0
doc-001: no_signatures
All valid: no
Unsigned documents: yes

Burada 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.

İ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.

batch-validate-contracts.php
<?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"
}
  • Boş bir giriş listesi \InvalidArgumentException fırlatır; tek bir çağrıda 1,000’den fazla belge \OverflowException fı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 unavailable olur, bu nedenle hiçbir imza Valid’e ulaşamaz. Daha önceki sürümler burada Valid raporluyordu; 3.1.0 Indeterminate raporlar (bkz. Kavramsal genel bakış).
  • Belge düzeyindeki sayaçlar katıdır: yalnızca Valid, validCount’u artırır. Invalid, Indeterminate ve Error hepsi invalidCount’u artırır. Bu nedenle tek imzası Indeterminate olan bir belge all_invalid raporlar. Ayrım önemli olduğunda imza başına status ü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.
  • crlStatus toplu sonuçlarda asla revoked raporlamaz. CRL yedeği yalnızca liste tazeliğini onaylar; yetkili bir iptal sonucu OCSP’den gelir.
  • timestamp toplu sonuçlarda her zaman absent()’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ış /Name dizesi değil.
  • trustedCerts girdileri PEM sertifikaları olmalıdır. Boş veya bozuk bir çıpa listesi, trusted: false ile 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 error durumu ü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.
  • 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. /Name girdisi 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ıt Indeterminate’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.

NextPDF 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.

Toplu 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.

  • validate(), boş bir liste için \InvalidArgumentException ve 1,000 belgenin üzerinde \OverflowException fırlatır. Bozuk belgeler asla fırlatmaz; belge başına error sonuçları üretirler.
  • Valid şu bileşimi gerektirir: CMS kriptografik olarak doğrulanmış, zincir geçerli, güven çıpası üyeliği doğrulanmış ve RevocationStatus::hasConclusiveGood() doğru.
  • İptal edildiği doğrulanmış bir sertifika kesindir: diğer tüm kanıtlardan bağımsız olarak karar Invalid olur.
  • Her iki iptal denetiminin de Unknown/Unavailable olması Indeterminate anlamına gelir, asla Valid değ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; /Name girdisi asla kullanılmaz.
  • timestamp toplu sonuçlarda her zaman yok durumundadır.
  • validCount yalnızca Valid’i sayar; diğer tüm durumlar invalidCount’a sayılır ve belge durumu bu sayaçlardan toplanır.
  • toJson(), açıkça bir koruma geçirilmedikçe varsayılan-gizlilikli CertPiiGuard’ı uygular.
  • Rapor toplamları, belge başına sonuçlar üzerinden kesin toplamlardır; durationMs, toplu iş için ölçülen duvar saati süresidir.

NextPDF 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.

Bu 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.