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
| IntegrityResult | Kryptografisches CMS- oder klassisches PKCS#7-Integritätsergebnis für den ausgewählten Signer |
|---|---|
| CoverageStatus | scInvalid, scSignedRevision, or scWholeDocument |
| ByteRangeValid | Nur True, wenn alle Bereiche begrenzt sind und die signierte Revision an ihrem eigenen %%EOF endet |
| ContentsGapValid | Nur True, wenn die ausgelassenen Bytes exakt dem ausgewählten hexadezimalen /Contents-Token entsprechen |
| HasLaterRevisions | True, wenn die ausgewählte Signatur eine frühere inkrementelle Revision beglaubigt und spätere Bytes existieren |
| SignedRevisionLength | Bytelänge der von der ausgewählten Signatur beglaubigten Revision |
| PermissionReport | Analysierte 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
ahsValidAtRequestedTime | Integrität und Kette sind ohne Zeitverschiebung gültig |
|---|---|
ahsValidAtProofTime | Die Kette ist zu einer aus einem vertrauenswürdigen Zeitstempel abgeleiteten Kontrollzeit gültig |
ahsIntegrityInvalid | Der ausgewählte Signatur- oder Dokumentzeitstempel fällt bei der Integritäts- oder ByteRange-Prüfung durch |
ahsNoTrustedProof | Kein vertrauenswürdiger Zeitstempel deckt die ausgewählte Signaturrevision ab |
ahsEvidenceNotArchived | Eine Sperrprüfung wurde angefordert, aber kein vertrauenswürdiger Archivierungszeitstempel über das Gesamtdokument versiegelt das Validierungsmaterial |
ahsHistoricalTrustInvalid | Vertrauenswü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