TPDFlibSignatureVerifier

Sicherheit und Signaturen

Beschreibung

Zählt PDF-Signaturfelder und CMS-Signer auf, prüft eine ausgewählte Signatur, ohne das vollständige PDF in den Speicher zu laden, und berichtet über die inkrementelle Revision der ausgewählten Signatur getrennt von der aktuellen Datei Der Verifizierer akzeptiert eine Datei, einen von der Aufrufseite verwalteten Stream oder eine ANSI-Byte-Zeichenkette über

OpenPDF, OpenPDFStream oder OpenPDFString

Auswahl

Count := Verifier.GetSignatureCount;
Verifier.GetSignatureFieldName(0, FieldName);
SignerCount := Verifier.GetSignerCount(0);
Result := Verifier.VerifySignatureByName(FieldName, 0, Report);

VerifySignatureByIndex wählt ein PDF-Feld über einen nullbasierten Index aus, während VerifySignatureByName den vollqualifizierten AcroForm-Feldnamen verwendet; beide Methoden akzeptieren einen nullbasierten CMS-Signer-Index

Signaturprüfbericht

IntegrityResultKryptografisches CMS- oder klassisches PKCS#7-Integritätsergebnis für den ausgewählten Signer
CoverageStatusscInvalid, scSignedRevision, or scWholeDocument
ByteRangeValidNur True, wenn alle Bereiche begrenzt sind und die signierte Revision an ihrem eigenen %%EOF endet
ContentsGapValidNur True, wenn die ausgelassenen Bytes exakt dem ausgewählten hexadezimalen /Contents-Token entsprechen
HasLaterRevisionsTrue, wenn die ausgewählte Signatur eine frühere inkrementelle Revision beglaubigt und spätere Bytes existieren
SignedRevisionLengthBytelänge der von der ausgewählten Signatur beglaubigten Revision
PermissionReportAnalysierte DocMDP- und FieldMDP-Beschränkungen der ausgewählten Signatur

Zertifizierung und Feldberechtigungen

GetSignaturePermissionInfo und GetSignaturePermissionInfoByName geben TPDFlibSignaturePermissionReport zurück Der Bericht unterscheidet eine gültige DocMDP-Transformation von einer passenden

/Perms /DocMDP-Referenz im Katalog und prüft, ob ein /Lock-Wörterbuch eines Felds zu seiner FieldMDP-Transformation, ihrer Aktion und ihrer Feldnamenliste passt

Zertifikatskette und Sperrung

VerifySignerCertificateChainByIndex und VerifySignerCertificateChainByName führen die Standard-Kettenvalidierung für eine explizit ausgewählte Signatur und einen explizit ausgewählten Signer aus

VerifySignerCertificateChainEx und VerifySignerCertificateChainExByName fügen geprüfte X.509-Zertifikate zu einer speicherinternen, duplikatfreien Menge von Vertrauensankern hinzu Ist die Menge nicht leer, wird jede Signer- und Zeitstempelkette mit einer exklusiven Vertrauens-Engine aufgebaut, die die Menge für CA-Roots und explizite Zertifikats-Pins verwendet, ohne die Windows-Speicher srmNone oder srmCacheOnly zu konsultieren Die exklusive Engine und der analysierte Root-Speicher werden vom Verifizierer zwischengespeichert und wiederverwendet, bis sich die Anker-Menge ändert Diese Isolation erlaubt einer Anwendung, eine eigene geschäftliche Vertrauensrichtlinie anzuwenden, ohne Zertifikate zu installieren oder nicht verwandtes Vertrauen des Rechners zu übernehmen Die Mitgliedschaft als Vertrauensanker umgeht keine Prüfungen der Zertifikatsgültigkeit, der Schlüsselverwendung, der Signatur oder der angeforderten Sperrung srmOnline gibt die Menge frei und stellt für weitere Prüfungen wieder die standardmäßige Windows-Vertrauens-Engine des Systems bereit

TPDFlibSignatureChainReport trennt TrustStatus, Windows-Ketten- und Richtlinienfehler, DSS- oder VRI-Nachweisanzahlen, exakte OCSP-Zurechnung, OCSP-Status, Sperrgrund, Frische und native Fehler

Eingebettete Zertifikate und Validierungsmaterial können eine Kette vervollständigen, machen aber aus einer nicht vertrauenswürdigen Wurzel keine vertrauenswürdige

DSS- oder VRI-OCSP-Nachweise werden nur akzeptiert, wenn ihre Responder-Signatur, die Issuer- oder delegierte Responder-Verwendung, CertID, Status und Frische zum ausgewählten Zertifikat passen

Externe Vertrauensquellen

Verifier.AddTrustAnchorDER(RootCertificateDER);
Verifier.AddTrustAnchorFromFile('BusinessRoot.cer');
AnchorCount := Verifier.GetTrustAnchorCount;
Verifier.ClearTrustAnchors;

AddTrustAnchorDER hängt eine nicht besitzende AddTrustAnchorFromFile an, die zeitabhängige Anker liefern und eine erfolgreich aufgebaute Zertifikatskette bewerten kann Quellanker werden mit manuellen benutzerdefinierten Ankern in derselben exklusiven Ketten-Engine kombiniert, die nach Quellrevision und Prüfzeit zwischengespeichert wird Das Zuweisen einer Quelle deaktiviert den Rückgriff auf Windows-System-Roots, wenn kein Quell- oder manueller Anker verfügbar ist Eine erfolgreiche Quellbewertung füllt

Wenn der Satz nicht leer ist, wird jede Signatur- und Zeitstempelkette mit einer exklusiven Vertrauensengine aufgebaut, die den Satz für CA-Wurzeln und explizite Zertifikatspins nutzt, ohne die Windows-Speicher Root oder TrustedPeople zu konsultieren

Die exklusive Engine und der geparste Wurzelspeicher werden vom Prüfer zwischengespeichert und bis zur Änderung des Ankersatzes wiederverwendet

Diese Isolation erlaubt einer Anwendung, eine private geschäftliche Vertrauensrichtlinie anzuwenden, ohne Zertifikate zu installieren oder fremde Maschinenvertrauen zu erben

Die Mitgliedschaft als Vertrauensanker umgeht keine Prüfungen von Zertifikatsgültigkeit, Schlüsselverwendung, Signatur oder angeforderter Sperrung

ClearTrustAnchors gibt den Satz frei und stellt die standardmäßige Windows-System-Vertrauensengine für nachfolgende Prüfungen wieder her

RFC-3161-Zeitstempel

Verifier.SetTrustSource(TrustSource);
Source := Verifier.GetTrustSource;

SetTrustSource (Signaturindex) und TPDFlibSignatureTrustSource (Feldname) prüfen einen Dokumentzeitstempel gegen die ByteRange-Daten der Signatur

Quellanker werden mit manuellen benutzerdefinierten Ankern in derselben exklusiven Kettenengine kombiniert, die nach Quellrevision und Verifizierungszeit zwischengespeichert wird

Das Zuweisen einer Quelle deaktiviert den Rückgriff auf Windows-Systemwurzeln, wenn keine Quelle und kein manueller Anker verfügbar ist

Eine erfolgreiche Quellenauswertung füllt TPDFlibSignatureChainReport.QualificationReport, ohne Prüfungen von Zertifikatskette, Verwendung, Gültigkeit, Signatur oder Sperrung abzuschwächen

TPDFlibEUTSLTrustSource

RFC-3161-Zeitstempel

VerifyDocumentTimeStamp und die VerifyDocumentTimeStampByName-Familie zählen

GetSignatureTimeStampCount und VerifySignatureTimeStamp prüfen zunächst die Signaturintegrität und die Signer-Kette zur angeforderten UTC-Zeit Ist die Kette zur angeforderten Zeit ungültig, prüft der Verifizierer jeden Signaturzeitstempel und jeden Dokumentzeitstempel, dessen signierte Revision die Zielsignatur abdeckt, leitet die früheste vertrauenswürdige Signaturzeit und die späteste Archivierungszeit des Gesamtdokuments ab und wiederholt die Kettenprüfung zu diesen Existenznachweis-Kontrollzeiten Ein id-aa-signatureTimeStampToken von null wählt die aktuelle UTC-Zeit, während ein Wert ungleich null direkt als UTC an die Zertifikatskettenrichtlinie übergeben wird signatureValue erlaubt, dass ein vertrauenswürdiger Signaturzeitstempel oder ein abdeckender Dokumentzeitstempel die historische Kontrollzeit liefert VerifySignatureTimeStamp und VerifySignatureTimeStampByName verlangen einen vertrauenswürdigen Dokumentzeitstempel, der das vollständige aktuelle Dokument abdeckt, bevor aktuelle DSS-, VRI-, CRL- oder OCSP-Materialien als historische Nachweise gelten können; andernfalls gibt der Bericht

Ex zurück Ein Zeitstempel liefert eine Obergrenze dafür, wann die signierten Bytes existierten, keine erschlossene Signaturzeit; ein Signer-Zertifikat, das zum ausgewählten Nachweiszeitpunkt bereits ungültig war, bleibt daher ungültig VerifyDocumentTimeStampEx liefert die angeforderten und effektiven Kettenberichte, die besten Signatur- und Archivierungszeiten, die ausgewählte Nachweisquelle, Zeitstempelanzahlen, den Zeitverschiebungszustand und einen spezifischen historischen Status VerifyDocumentTimeStampExByName verarbeitet einen solchen Bericht nach und füllt VerifySignatureTimeStampExVerifySignatureTimeStampExByName

TPDFlibTimeStampVerificationReport

AdES-historische Validierung

Result := Verifier.VerifyAdESHistoricalByName(
  FieldName, 0, srmCacheOnly, ValidationTime, HistoricalReport);

VerifyAdESHistorical und VerifyAdESHistoricalByName validieren zuerst Signaturintegrität und die Signeurekette zur angeforderten UTC-Zeit

Ist die Kette zur angeforderten Zeit ungültig, validiert der Prüfer jeden Signaturzeitstempel und jeden Dokumentzeitstempel, dessen signierte Revision die Zielsignatur abdeckt, leitet die früheste vertrauenswürdige Signaturzeit und die späteste Gesamtdokument-Archivzeit ab und wiederholt die Kette zu diesen Kontrollzeiten des Existenznachweises

Ein ValidationTime von null wählt die aktuelle UTC-Zeit, während ein Wert ungleich null direkt als UTC an die Zertifikatskettenrichtlinie übergeben wird

srmNone

srmCacheOnly und srmOnline verlangen einen vertrauenswürdigen Dokumentzeitstempel, der das vollständige aktuelle Dokument abdeckt, bevor aktuelle DSS-, VRI-, CRL- oder OCSP-Materialien als historische Beweise gelten können; sonst liefert der Bericht ahsEvidenceNotArchived

Ein Zeitstempel liefert eine Obergrenze dafür, wann die signierten Bytes existierten, nicht eine erschlossene Signaturzeit; ein Signaturzertifikat, das zur gewählten Beweiszeit bereits ungültig war, bleibt daher ungültig

TPDFlibAdESHistoricalValidationReport liefert angeforderte und effektive Kettenberichte, die besten Signatur- und Archivzeiten, die gewählte Beweisquelle, Zeitstempelanzahlen, den Zeitverschiebungszustand und einen bestimmten historischen Status

DeriveBaselineProfileBaselineProfile

ahsValidAtRequestedTimeIntegrität und Kette sind ohne Zeitverschiebung gültig
ahsValidAtProofTimeDie Kette ist zu einer aus einem vertrauenswürdigen Zeitstempel abgeleiteten Kontrollzeit gültig
ahsIntegrityInvalidDer ausgewählte Signatur- oder Dokumentzeitstempel fällt bei der Integritäts- oder ByteRange-Prüfung durch
ahsNoTrustedProofKein vertrauenswürdiger Zeitstempel deckt die ausgewählte Signaturrevision ab
ahsEvidenceNotArchivedEine Sperrprüfung wurde angefordert, aber kein vertrauenswürdiger Archivierungszeitstempel über das Gesamtdokument versiegelt das Validierungsmaterial
ahsHistoricalTrustInvalidVertrauenswürdige Nachweiszeiten existieren, aber die Signer-Kette ist zu jeder abgeleiteten Kontrollzeit ungültig

Kompatibilitätsmethoden

VerifySignatureGetSignatureMetadataGetSignerCertificateVerifySignerCertificateChain

ByIndex, ByName, GetSignatureMetadataByIndex und GetSignatureMetadataByName bleiben verfügbar und wählen Feld 0 und Signer 0 aus Die entsprechenden GetSignerCertificateByIndex- und GetSignerCertificateByName-Methoden (

Siehe auch

TPDFlibEUTSLTrustSource, SetSignProcessDocMDP, SetSignProcessFieldLock, SetPAdESSignatureTimeStampToken