TPDFlibSignatureVerifier
Sicurezza e firme
Descrizione
Enumera i campi firma PDF e i firmatari CMS, convalida una firma selezionata senza caricare l'intero PDF in memoria e riporta la revisione incrementale della firma selezionata separatamente dal file corrente Il verificatore accetta un file, uno stream di proprietà del chiamante o una stringa di byte ANSI tramite
OpenPDF, OpenPDFStream o OpenPDFString
Selezione
Count := Verifier.GetSignatureCount;
Verifier.GetSignatureFieldName(0, FieldName);
SignerCount := Verifier.GetSignerCount(0);
Result := Verifier.VerifySignatureByName(FieldName, 0, Report);
VerifySignatureByIndex seleziona un campo PDF tramite un indice a base zero, mentre VerifySignatureByName usa il nome completo del campo AcroForm ed entrambi i metodi accettano un indice del firmatario CMS a base zero
Report di verifica della firma
| IntegrityResult | Risultato di integrità crittografica CMS o PKCS#7 legacy per il firmatario selezionato |
|---|---|
| CoverageStatus | scInvalid, scSignedRevision, or scWholeDocument |
| ByteRangeValid | True solo quando tutti gli intervalli sono delimitati e la revisione firmata termina con il proprio %%EOF |
| ContentsGapValid | True solo quando i byte omessi sono esattamente il token esadecimale /Contents selezionato |
| HasLaterRevisions | True quando la firma selezionata autentica una revisione incrementale precedente ed esistono byte successivi |
| SignedRevisionLength | Lunghezza in byte della revisione autenticata dalla firma selezionata |
| PermissionReport | Vincoli DocMDP e FieldMDP analizzati per la firma selezionata |
Certificazione e permessi dei campi
GetSignaturePermissionInfo e GetSignaturePermissionInfoByName restituiscono TPDFlibSignaturePermissionReport
Il report distingue una trasformazione DocMDP valida da un riferimento
/Perms /DocMDP corrispondente nel catalogo e verifica che un dizionario /Lock di campo corrisponda alla propria trasformazione, azione ed elenco di nomi di campo FieldMDP
Catena di certificati e revoca
VerifySignerCertificateChainByIndex e VerifySignerCertificateChainByName eseguono la validazione predefinita della catena per una firma e un firmatario selezionati esplicitamente
VerifySignerCertificateChainEx e VerifySignerCertificateChainExByName aggiungono certificati X.509 convalidati a un insieme in memoria di trust anchor privo di duplicati
Quando l'insieme non è vuoto, ogni catena di firmatario e di timestamp viene costruita con un motore di attendibilità esclusivo che usa l'insieme per le radici CA e per i pin di certificato espliciti, senza consultare gli archivi Windows srmNone o srmCacheOnly
Il motore esclusivo e l'archivio radice analizzato vengono memorizzati nella cache dal verificatore e riutilizzati finché l'insieme di trust anchor non cambia
Questo isolamento consente a un'applicazione di applicare una politica di attendibilità aziendale privata senza installare certificati né ereditare trust di macchina non correlati
L'appartenenza all'insieme di trust anchor non aggira i controlli di validità del certificato, di uso della chiave, di firma o di revoca richiesti
srmOnline rilascia l'insieme e ripristina il motore di attendibilità predefinito del sistema Windows per i controlli successivi
TPDFlibSignatureChainReport separa TrustStatus, gli errori di catena e di policy di Windows, i conteggi di evidenza DSS o VRI, l'attribuzione OCSP esatta, lo stato OCSP, il motivo di revoca, la freschezza e gli errori nativi
I certificati incorporati e il materiale di validazione possono completare una catena, ma non convertono una radice non attendibile in una radice attendibile
L'evidenza OCSP di DSS o VRI viene accettata solo quando la sua firma del responder, l'uso dell'issuer o del responder delegato, il CertID, lo stato e la freschezza coincidono col certificato selezionato
Fonti di attendibilità esterne
Verifier.AddTrustAnchorDER(RootCertificateDER);
Verifier.AddTrustAnchorFromFile('BusinessRoot.cer');
AnchorCount := Verifier.GetTrustAnchorCount;
Verifier.ClearTrustAnchors;
AddTrustAnchorDER collega un AddTrustAnchorFromFile non proprietario, in grado di fornire anchor legati a un momento specifico e di valutare una catena di certificati costruita con successo
Gli anchor della sorgente vengono combinati con gli anchor personalizzati manuali nello stesso motore di catena esclusivo, che viene memorizzato nella cache per revisione della sorgente e momento di verifica
L'assegnazione di una sorgente disabilita il fallback alle radici di sistema Windows quando non è disponibile alcun anchor della sorgente o manuale
Una valutazione della sorgente andata a buon fine popola
Quando il set non è vuoto, ogni catena di firmatario e di timestamp viene costruita con un motore di attendibilità esclusivo che usa il set per radici CA e certificati bloccati espliciti senza consultare gli store Root o TrustedPeople di Windows
Il motore esclusivo e l'archivio radici analizzato vengono memorizzati in cache dal verificatore e riusati finché il set di ancoraggi cambia
Questo isolamento permette a un'applicazione di applicare una politica di attendibilità aziendale privata senza installare certificati né ereditare attendibilità di macchina altrui
L'appartenenza agli ancoraggi di attendibilità non aggira i controlli di validità del certificato, uso della chiave, firma o revoca richiesta
ClearTrustAnchors rilascia il set e ripristina il motore di attendibilità di sistema Windows predefinito per i controlli successivi
Timestamp RFC 3161
Verifier.SetTrustSource(TrustSource);
Source := Verifier.GetTrustSource;
SetTrustSource (indice della firma) e TPDFlibSignatureTrustSource (nome del campo) convalidano un timestamp del documento rispetto ai dati ByteRange della firma
Le ancore dell'origine vengono combinate con le ancore personalizzate manuali nello stesso motore di catena esclusivo, memorizzato in cache per revisione dell'origine e tempo di verifica
Assegnare una origine disattiva il fallback alle radici di sistema di Windows quando non sono disponibili origine né ancoraggio manuale
Una valutazione dell'origine con successo riempie TPDFlibSignatureChainReport.QualificationReport senza indebolire i controlli di catena di certificati, uso, validità, firma o revoca
TPDFlibEUTSLTrustSource
Timestamp RFC 3161
VerifyDocumentTimeStamp e la famiglia VerifyDocumentTimeStampByName enumerano e convalidano gli attributi
GetSignatureTimeStampCount e VerifySignatureTimeStamp convalidano dapprima l'integrità della firma e la catena del firmatario al momento UTC richiesto
Se la catena al momento richiesto non è valida, il verificatore convalida ogni timestamp della firma e ogni timestamp del documento la cui revisione firmata copre la firma obiettivo, ricava il primo momento di firma attendibile e l'ultimo momento di archiviazione dell'intero documento, e ripete la validazione della catena in quei momenti di controllo della prova di esistenza
Un id-aa-signatureTimeStampToken pari a zero seleziona il momento UTC corrente, mentre un valore diverso da zero viene passato direttamente alla politica della catena di certificati come UTC
signatureValue consente a un timestamp della firma attendibile o a un timestamp del documento che copre la firma di fornire il momento di controllo storico
VerifySignatureTimeStamp e VerifySignatureTimeStampByName richiedono un timestamp del documento attendibile che copra l'intero documento corrente prima che il materiale DSS, VRI, CRL o OCSP attuale possa essere trattato come evidenza storica; in caso contrario il report restituisce
Ex
Un timestamp fornisce un limite superiore al momento in cui i byte firmati esistevano, non un momento di firma dedotto, quindi un certificato del firmatario che risultava già non valido al momento di prova selezionato resta non valido
VerifyDocumentTimeStampEx restituisce i report di catena richiesto ed effettivo, i migliori momenti di firma e di archiviazione, la sorgente di prova selezionata, i conteggi dei timestamp, lo stato dello scorrimento temporale e uno stato storico specifico
VerifyDocumentTimeStampExByName esegue la post-elaborazione di un report di questo tipo, compilando VerifySignatureTimeStampExVerifySignatureTimeStampExByName
TPDFlibTimeStampVerificationReport
Validazione storica AdES
Result := Verifier.VerifyAdESHistoricalByName(
FieldName, 0, srmCacheOnly, ValidationTime, HistoricalReport);
VerifyAdESHistorical e VerifyAdESHistoricalByName validano prima l'integrità della firma e la catena del firmatario all'ora UTC richiesta
Se la catena all'ora richiesta è invalida, il verificatore valida ogni timestamp di firma e ogni timestamp di documento la cui revisione firmata copre la firma bersaglio, deduce l'ora di firma attendibile più precoce e l'ora di archiviazione dell'intero documento più tarda, e ritenta la catena a quelle ore di controllo di prova di esistenza
Un ValidationTime zero seleziona l'ora UTC corrente, mentre un valore diverso da zero viene passato direttamente alla politica di catena di certificati come UTC
srmNone
srmCacheOnly e srmOnline richiedono un timestamp di documento attendibile che copra il documento corrente completo prima che il materiale DSS, VRI, CRL o OCSP corrente possa essere trattato come prova storica; altrimenti il report restituisce ahsEvidenceNotArchived
Un timestamp fornisce un limite superiore di quando esistevano i byte firmati, non un'ora di firma dedotta, così un certificato di firmatario già invalido all'ora di prova selezionata resta invalido
TPDFlibAdESHistoricalValidationReport restituisce report di catena richiesto ed effettivo, le migliori ore di firma e di archiviazione, la sorgente di prova selezionata, i conteggi di timestamp, lo stato di time-slide e uno stato storico specifico
DeriveBaselineProfileBaselineProfile
ahsValidAtRequestedTime | L'integrità e la catena sono valide senza scorrimento temporale |
|---|---|
ahsValidAtProofTime | La catena è valida a un momento di controllo derivato da un timestamp attendibile |
ahsIntegrityInvalid | Il timestamp della firma o del documento selezionato non supera la validazione di integrità o ByteRange |
ahsNoTrustedProof | Nessun timestamp attendibile copre la revisione della firma selezionata |
ahsEvidenceNotArchived | La verifica della revoca era stata richiesta, ma nessun timestamp di archiviazione attendibile dell'intero documento sigilla il materiale di validazione |
ahsHistoricalTrustInvalid | Esistono momenti di prova attendibili, ma la catena del firmatario non è valida in ognuno dei momenti di controllo derivati |
Metodi di compatibilità
VerifySignatureGetSignatureMetadataGetSignerCertificateVerifySignerCertificateChain
ByIndex, ByName, GetSignatureMetadataByIndex e GetSignatureMetadataByName restano disponibili e selezionano il campo 0 e il firmatario 0
I metodi GetSignerCertificateByIndex e GetSignerCertificateByName corrispondenti (
Vedere anche
TPDFlibEUTSLTrustSource, SetSignProcessDocMDP, SetSignProcessFieldLock, SetPAdESSignatureTimeStampToken