Stapelvalidierung von Signaturen mit gemeinsamen Caches

HotPDF kann alle Signaturen eines geladenen Dokuments in einem Durchlauf über drei gemeinsame Caches validieren: einen Zertifikatspfadcache, der durch den CMS-Zertifikatssatz und die wirksamen Validierungsoptionen bestimmt wird, einen Zeitstempelcache für den CMS-Blob und /ByteRange sowie den durch Aussteller und Seriennummer bestimmten Evidenzspeicher THPDFRevocationEvidenceCache

THotPDF.ValidateLoadedSignatureBatch

Der Einstiegspunkt auf Dokumentebene zählt alle Signaturfelder auf, prüft jeden /ByteRange bytegenau gegen die Quelle, sammelt DSS- und /VRI-Evidenz und führt die Zertifikatspfadvalidierung mit den gemeinsamen Caches aus. Ein WorkerLimit größer als eins wertet Pfade auf parallelen Workern aus

var
  Options: THPDFSignatureBatchOptions;
  Result: THPDFSignatureBatchResult;
begin
  PDF.LoadFromFile('Signed.pdf');
  Options:= THPDFSignatureBatchOptions.Default;
  Options.CertificateOptions.TrustAnchors:= MyAnchors;
  Result:= PDF.ValidateLoadedSignatureBatch(Options);
  if Result.AllSignaturesValid then
    WriteLn('All ', Result.SignatureCount, ' signatures valid');
end;

Gemeinsame Caches

Signaturen mit derselben Unterzeichnerkette verwenden das vorherige Pfadurteil erneut, statt es neu zu berechnen: Die Schlüssel des Pfadcaches umfassen CMS-Zertifikatssatz, Vertrauensanker, Zwischenzertifikate, jeden OCSP-, CRL- und Delta-CRL-Blob in Auswertungsreihenfolge, Sperrmodus, Validierungszeit und den vollständigen Richtlinienblock. Aus einem Cache eingefügte Evidenz wird mit der Evidenzquelle vesCache markiert

Der Sperrcache speichert jede OCSP-Antwort und CRL, die während eines Stapels gesehen wird, nach Aussteller-DN, Seriennummer und Gültigkeitsfenster, sodass spätere Signaturen und spätere Stapel mit derselben Instanz von THPDFRevocationEvidenceCache Sperrinformationen ohne erneute Evidenzbereitstellung auflösen

Der Zeitstempelcache speichert Urteile der Byteprüfung für Dokumentzeitstempel über das gesamte CMS (ETSI.RFC3161) und eingebettete Signaturzeitstempel-Token. Ein Cachetreffer für ein eingebettetes Token setzt THPDFCMSVerifyOptions.SkipSignatureTimestampVerification, überspringt somit die erneute Tokenprüfung, während die primäre CMS-Signatur weiterhin vollständig geprüft wird

Eigenständige Stapel-Engine

THPDFSignatureValidationBatch akzeptiert Aufträge, deren Info das Urteil der Byteprüfung bereits enthält, für Aufrufer, die den Quellstream besitzen oder außerhalb der Komponente prüfen. FailFast stoppt die Verteilung nach dem ersten negativen Urteil, und ein THPDFCancellationToken lässt verbleibende Einträge bei sbsCancelled

Batch:= THPDFSignatureValidationBatch.Create(Options);
try
  Batch.AddJob(Job);
  Result:= Batch.Run;
finally
  Batch.Free;
end;

Strukturierte Ergebnisse

Jeder Eintrag meldet Signatur- und Zertifikatsstatus, den wiederverwendeten Cache und Diagnosen je Signatur; HPDFSignatureBatchResultToJSON gibt den gesamten Stapel mit Cachestatistiken als maschinenlesbares JSON aus