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
| IntegrityResult | Résultat d'intégrité cryptographique CMS ou PKCS#7 historique pour le signataire sélectionné |
|---|---|
| CoverageStatus | scInvalid, scSignedRevision, or scWholeDocument |
| ByteRangeValid | Vrai uniquement lorsque toutes les plages sont bornées et que la révision signée se termine par son propre %%EOF |
| ContentsGapValid | Vrai uniquement lorsque les octets omis correspondent exactement au jeton hexadécimal /Contents sélectionné |
| HasLaterRevisions | Vrai lorsque la signature sélectionnée authentique une révision incrémentielle antérieure et que des octets plus récents existent |
| SignedRevisionLength | Longueur en octets de la révision authentifiée par la signature sélectionnée |
| PermissionReport | Contraintes 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
ahsValidAtRequestedTime | L'intégrité et la chaîne sont valides sans glissement temporel |
|---|---|
ahsValidAtProofTime | La chaîne est valide à un instant de contrôle dérivé d'un horodatage de confiance |
ahsIntegrityInvalid | La signature sélectionnée ou l'horodatage de document échoue à la validation d'intégrité ou de ByteRange |
ahsNoTrustedProof | Aucun horodatage de confiance ne couvre la révision de la signature sélectionnée |
ahsEvidenceNotArchived | La 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 |
ahsHistoricalTrustInvalid | Des 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