TPDFlibSignatureVerifier

Sécurité et signatures

Description

Énumère les champs de signature PDF et les signataires CMS, valide une signature sélectionnée sans charger le PDF complet en mémoire et signale la révision incrémentielle de la signature sélectionnée séparément du fichier courant Le vérificateur accepte un fichier, un flux appartenant à l'appelant ou une chaîne d'octets ANSI via

OpenPDF, OpenPDFStream ou OpenPDFString

Sélection

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

VerifySignatureByIndex sélectionne un champ PDF par index à base zéro, tandis que VerifySignatureByName utilise le nom de champ AcroForm complet ; les deux méthodes acceptent un index de signataire CMS à base zéro

Rapport de vérification de signature

IntegrityResultRésultat d'intégrité cryptographique CMS ou PKCS#7 historique pour le signataire sélectionné
CoverageStatusscInvalid, scSignedRevision, or scWholeDocument
ByteRangeValidVrai uniquement lorsque toutes les plages sont bornées et que la révision signée se termine par son propre %%EOF
ContentsGapValidVrai uniquement lorsque les octets omis correspondent exactement au jeton hexadécimal /Contents sélectionné
HasLaterRevisionsVrai lorsque la signature sélectionnée authentique une révision incrémentielle antérieure et que des octets plus récents existent
SignedRevisionLengthLongueur en octets de la révision authentifiée par la signature sélectionnée
PermissionReportContraintes DocMDP et FieldMDP analysées pour la signature sélectionnée

Certification et autorisations de champs

GetSignaturePermissionInfo et GetSignaturePermissionInfoByName renvoient un TPDFlibSignaturePermissionReport Le rapport distingue une transformation DocMDP valide d'une référence catalogue

/Perms /DocMDP correspondante et vérifie qu'un dictionnaire /Lock de champ correspond à sa transformation FieldMDP, à son action et à sa liste de noms de champs

Chaîne de certificats et révocation

VerifySignerCertificateChainByIndex et VerifySignerCertificateChainByName exécutent la validation de chaîne par défaut pour une signature et un signataire explicitement sélectionnés

VerifySignerCertificateChainEx et VerifySignerCertificateChainExByName ajoutent des certificats X.509 validés à un ensemble d'ancres de confiance en mémoire, sans doublons Lorsque l'ensemble n'est pas vide, chaque chaîne de signataire et d'horodatage est construite avec un moteur de confiance exclusif qui utilise cet ensemble comme racines d'AC et épinglages explicites de certificats, sans consulter les magasins Windows srmNone ni srmCacheOnly Le moteur exclusif et le magasin de racines analysé sont mis en cache par le vérificateur et réutilisés jusqu'à ce que l'ensemble d'ancres change Cette isolation permet à une application d'appliquer une stratégie de confiance métier privée sans installer de certificats ni hériter de relations de confiance de la machine sans rapport L'appartenance aux ancres de confiance ne contourne pas les contrôles de validité du certificat, d'usage de la clé, de signature ou de révocation demandés srmOnline libère l'ensemble et rétablit le moteur de confiance système Windows par défaut pour les vérifications suivantes

TPDFlibSignatureChainReport sépare TrustStatus, les erreurs de chaîne et de politique Windows, les décomptes de preuves DSS ou VRI, l'attribution OCSP exacte, le statut OCSP, le motif de révocation, la fraîcheur et les erreurs natives

Les certificats incorporés et le matériel de validation peuvent compléter une chaîne, mais ne transforment pas une racine non fiable en racine fiable

La preuve OCSP de DSS ou VRI n'est acceptée que si sa signature de répondeur, l'usage de l'émetteur ou du répondeur délégué, le CertID, le statut et la fraîcheur correspondent au certificat sélectionné

Sources de confiance externes

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

AddTrustAnchorDER attache une AddTrustAnchorFromFile sans propriété qui peut fournir des ancres propres à un instant donné et évaluer une chaîne de certificats construite avec succès Les ancres de la source sont combinées aux ancres personnalisées manuelles dans le même moteur de chaîne exclusif, mis en cache par révision de la source et heure de vérification L'affectation d'une source désactive le repli sur les racines système Windows lorsqu'aucune ancre de source ni manuelle n'est disponible Une évaluation de source réussie remplit

Quand le jeu n'est pas vide, chaque chaîne de signataire et d'horodatage est construite avec un moteur de confiance exclusif qui utilise le jeu pour des racines d'AC et des épinglages de certificats explicites sans consulter les magasins Root ou TrustedPeople de Windows

Le moteur exclusif et le magasin de racines analysé sont mis en cache par le vérificateur et réutilisés jusqu'à ce que le jeu d'ancres change

Cette isolation permet à une application d'appliquer une politique de confiance métier privée sans installer de certificats ni hériter d'une confiance de machine sans rapport

Être membre des ancles de confiance ne contourne pas les vérifications de validité de certificat, d'usage de clé, de signature ni de révocation demandée

ClearTrustAnchors libère le jeu et restaure le moteur de confiance système Windows par défaut pour les vérifications suivantes

Horodatages RFC 3161

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

SetTrustSource (index de signature) et TPDFlibSignatureTrustSource (nom de champ) valident un horodatage de document par rapport aux données ByteRange de la signature

Les ancres de source sont combinées avec les ancres personnalisées manuelles dans le même moteur de chaîne exclusif, mis en cache par révision de source et temps de vérification

L'affectation d'une source désactive le repli sur les racines système de Windows quand aucune source ni ancre manuelle n'est disponible

Une évaluation de source réussie remplit TPDFlibSignatureChainReport.QualificationReport sans affaiblir les vérifications de chaîne de certificats, d'usage, de validité, de signature ni de révocation

TPDFlibEUTSLTrustSource

Horodatages RFC 3161

VerifyDocumentTimeStamp et la famille VerifyDocumentTimeStampByName énumèrent et valident les attributs

GetSignatureTimeStampCount et VerifySignatureTimeStamp valident d'abord l'intégrité de la signature et la chaîne du signataire à l'heure UTC demandée Si la chaîne à l'heure demandée est invalide, le vérificateur valide chaque horodatage de signature et chaque horodatage de document dont la révision signée couvre la signature cible, déduit l'heure de signature de confiance la plus ancienne ainsi que la dernière heure d'archivage de l'ensemble du document, puis retente la chaîne à ces instants de contrôle attestant l'existence Un id-aa-signatureTimeStampToken nul sélectionne l'heure UTC courante, tandis qu'une valeur non nulle est transmise directement à la stratégie de chaîne de certificats en tant qu'UTC signatureValue autorise un horodatage de signature de confiance ou un horodatage de document couvrant à fournir l'instant de contrôle historique VerifySignatureTimeStamp et VerifySignatureTimeStampByName exigent un horodatage de document de confiance couvrant l'intégralité du document courant avant que le matériel DSS, VRI, CRL ou OCSP courant puisse être traité comme preuve historique ; sinon le rapport renvoie

Ex Un horodatage fournit une borne supérieure de l'existence des octets signés, et non une heure de signature déduite ; un certificat de signataire déjà invalide à l'instant de preuve sélectionné reste donc invalide VerifyDocumentTimeStampEx renvoie les rapports de chaîne demandé et effectif, les meilleures heures de signature et d'archivage, la source de preuve sélectionnée, les décomptes d'horodatage, l'état de glissement temporel et un statut historique précis VerifyDocumentTimeStampExByName post-traite un tel rapport en remplissant VerifySignatureTimeStampExVerifySignatureTimeStampExByName

TPDFlibTimeStampVerificationReport

Validation historique AdES

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

VerifyAdESHistorical et VerifyAdESHistoricalByName valident d'abord l'intégrité de la signature et la chaîne du signataire à l'heure UTC demandée

Si la chaîne à l'heure demandée est invalide, le vérificateur valide chaque horodatage de signature et chaque horodatage de document dont la révision signée couvre la signature cible, déduit la plus ancienne heure de signature fiable et la plus récente heure d'archivage de tout le document, et retente la chaîne à ces heures de contrôle de preuve d'existence

Un ValidationTime zéro sélectionne l'heure UTC actuelle, tandis qu'une valeur non nulle est passée directement à la politique de chaîne de certificats en UTC

srmNone

srmCacheOnly et srmOnline exigent un horodatage de document fiable couvrant le document actuel complet avant que le matériel DSS, VRI, CRL ou OCSP actuel puisse être traité comme preuve historique ; sinon, le rapport renvoie ahsEvidenceNotArchived

Un horodatage fournit une borne supérieure de l'existence des octets signés, pas une heure de signature déduite ; un certificat de signataire déjà invalide à l'heure de preuve sélectionnée reste donc invalide

TPDFlibAdESHistoricalValidationReport renvoie les rapports de chaîne demandé et effectif, les meilleures heures de signature et d'archivage, la source de preuve sélectionnée, les décomptes d'horodatages, l'état de glissement temporel et un statut historique spécifique

DeriveBaselineProfileBaselineProfile

ahsValidAtRequestedTimeL'intégrité et la chaîne sont valides sans glissement temporel
ahsValidAtProofTimeLa chaîne est valide à un instant de contrôle dérivé d'un horodatage de confiance
ahsIntegrityInvalidLa signature sélectionnée ou l'horodatage de document échoue à la validation d'intégrité ou de ByteRange
ahsNoTrustedProofAucun horodatage de confiance ne couvre la révision de la signature sélectionnée
ahsEvidenceNotArchivedLa vérification de révocation a été demandée, mais aucun horodatage d'archivage de confiance couvrant l'ensemble du document ne scelle le matériel de validation
ahsHistoricalTrustInvalidDes instants de preuve de confiance existent, mais la chaîne du signataire est invalide à chaque instant de contrôle dérivé

Méthodes de compatibilité

VerifySignatureGetSignatureMetadataGetSignerCertificateVerifySignerCertificateChain

ByIndex, ByName, GetSignatureMetadataByIndex et GetSignatureMetadataByName restent disponibles et sélectionnent le champ 0 et le signataire 0 Les méthodes GetSignerCertificateByIndex et GetSignerCertificateByName correspondantes (

Voir aussi

TPDFlibEUTSLTrustSource, SetSignProcessDocMDP, SetSignProcessFieldLock, SetPAdESSignatureTimeStampToken