TPDFlibSignatureVerifier
Zabezpieczenia i podpisy
Opis
Wylicza pola podpisów PDF i podpisujących CMS, sprawdza wybrany podpis bez wczytywania całego pliku PDF do pamięci oraz raportuje własną rewizję przyrostową wybranego podpisu oddzielnie od bieżącego pliku Weryfikator przyjmuje plik, strumień należący do wywołującego lub bajtowy ciąg ANSI za pośrednictwem
OpenPDF, OpenPDFStream lub OpenPDFString
Wybór
Count := Verifier.GetSignatureCount;
Verifier.GetSignatureFieldName(0, FieldName);
SignerCount := Verifier.GetSignerCount(0);
Result := Verifier.VerifySignatureByName(FieldName, 0, Report);
VerifySignatureByIndex wybiera pole PDF według indeksu liczonego od zera, VerifySignatureByName natomiast używa w pełni kwalifikowanej nazwy pola AcroForm, a obie metody przyjmują indeks podpisującego CMS liczony od zera
Raport weryfikacji podpisu
| IntegrityResult | Kryptograficzny wynik integralności CMS lub starszego formatu PKCS#7 dla wybranego podpisującego |
|---|---|
| CoverageStatus | scInvalid, scSignedRevision, or scWholeDocument |
| ByteRangeValid | True tylko wtedy, gdy wszystkie zakresy są ograniczone, a podpisana rewizja kończy się własnym znacznikiem %%EOF |
| ContentsGapValid | True tylko wtedy, gdy pominięte bajty to dokładnie wybrany szesnastkowy token /Contents |
| HasLaterRevisions | True, gdy wybrany podpis uwierzytelnia wcześniejszą rewizję przyrostową, a dalsze bajty istnieją |
| SignedRevisionLength | Długość w bajtach rewizji uwierzytelnionej przez wybrany podpis |
| PermissionReport | Przetworzone ograniczenia DocMDP i FieldMDP dla wybranego podpisu |
Certyfikacja i uprawnienia pól
GetSignaturePermissionInfo i GetSignaturePermissionInfoByName zwracają TPDFlibSignaturePermissionReport
Raport odróżnia prawidłową transformację DocMDP od pasującego odwołania
/Perms /DocMDP w katalogu i sprawdza, czy słownik /Lock pola odpowiada swojej transformacji FieldMDP, akcji oraz liście nazw pól
Łańcuch certyfikatów i odwoływanie
VerifySignerCertificateChainByIndex i VerifySignerCertificateChainByName uruchamiają domyślną walidację łańcucha dla jawnie wybranego podpisu i podpisującego
VerifySignerCertificateChainEx i VerifySignerCertificateChainExByName przyjmują srmNone, srmCacheOnly albo srmOnline plus opcjonalny czas weryfikacji
TPDFlibSignatureChainReport oddziela TrustStatus, błędy łańcucha i polityki Windows, liczbę dowodów DSS albo VRI, dokładne przypisanie OCSP, status OCSP, powód odwołania, świeżość i błędy natywne
Osadzone certyfikaty i materiał walidacyjny mogą dopełnić łańcuch, ale nie przemieniają niezaufanego korzenia w zaufany korzeń
Dowód OCSP z DSS albo VRI jest akceptowany tylko, gdy jego podpis odpowiadającego, użycie wystawcy albo delegowanego odpowiadającego, CertID, status i świeżość pasują do wybranego certyfikatu
Zewnętrzne źródła zaufania
Verifier.AddTrustAnchorDER(RootCertificateDER);
Verifier.AddTrustAnchorFromFile('BusinessRoot.cer');
AnchorCount := Verifier.GetTrustAnchorCount;
Verifier.ClearTrustAnchors;
AddTrustAnchorDER i AddTrustAnchorFromFile dodają zwalidowane certyfikaty X.509 do zestawu kotwic zaufania w pamięci, wolnego od duplikatów
Gdy zestaw jest niepusty, każdy łańcuch podpisującego i znacznika czasu jest budowany ekskluzywnym silnikiem zaufania, który używa zestawu dla korzeni CA i jawnych przypięć certyfikatów, nie konsultując magazynów Windows Root ani TrustedPeople
Ekskluzywny silnik i sparsowany magazyn korzeni są podręczne u weryfikatora i ponownie używane do zmiany zestawu kotwic
Ta izolacja pozwala aplikacji zastosować prywatną biznesową politykę zaufania bez instalowania certyfikatów i bez dziedziczenia niepowiązanego zaufania maszyny
Członkostwo w kotwicach zaufania nie omija kontroli ważności certyfikatu, użycia klucza, podpisu ani żądanych kontroli odwołania
ClearTrustAnchors zwalnia zestaw i przywraca domyślny silnik zaufania systemu Windows dla kolejnych kontroli
Znaczniki czasu RFC 3161
Verifier.SetTrustSource(TrustSource);
Source := Verifier.GetTrustSource;
SetTrustSource dołącza nieposiadające TPDFlibSignatureTrustSource, które może dostarczać kotwice specyficzne czasowo i oceniać pomyślnie zbudowany łańcuch certyfikatów
Kotwice źródła są łączone z ręcznymi własnymi kotwicami w tym samym ekskluzywnym silniku łańcuchów, podręcznym według rewizji źródła i czasu weryfikacji
Przypisanie źródła wyłącza awaryjny powrót do systemowych korzeni Windows, gdy brak kotwicy ze źródła albo z zestawu ręcznego
Udana ocena źródła wypełnia TPDFlibSignatureChainReport.QualificationReport, nie osłabiając kontroli łańcucha certyfikatów, użycia, ważności, podpisu ani odwołania
TPDFlibEUTSLTrustSource implementuje tę umowę dla podpisanych dokumentów unijnego LOTL i krajowych TSL
Znaczniki czasu RFC 3161
VerifyDocumentTimeStamp i rodzina VerifyDocumentTimeStampByName wyliczają i sprawdzają atrybuty
GetSignatureTimeStampCount i VerifySignatureTimeStamp najpierw sprawdzają integralność podpisu oraz łańcuch podpisującego w żądanym czasie UTC
Jeśli łańcuch dla żądanego czasu jest nieprawidłowy, weryfikator sprawdza każdy znacznik czasu podpisu oraz każdy znacznik czasu dokumentu, którego podpisana rewizja obejmuje podpis docelowy, wyznacza najwcześniejszy zaufany czas podpisu i najpóźniejszy czas archiwizacji całego dokumentu, a następnie ponawia sprawdzanie łańcucha w tych kontrolnych momentach udowodnienia istnienia
Zerowe id-aa-signatureTimeStampToken wybiera bieżący czas UTC, a wartość niezerowa jest przekazywana bezpośrednio do polityki łańcucha certyfikatów jako czas UTC
signatureValue pozwala, aby historyczny czas kontrolny dostarczył zaufany znacznik czasu podpisu lub obejmujący znacznik czasu dokumentu
VerifySignatureTimeStamp i VerifySignatureTimeStampByName wymagają zaufanego znacznika czasu dokumentu obejmującego kompletny bieżący dokument, zanim bieżący materiał DSS, VRI, CRL lub OCSP będzie można potraktować jako dowód historyczny; w przeciwnym razie raport zwraca
Ex
Znacznik czasu dostarcza górnej granicy momentu istnienia podpisanych bajtów, a nie wywnioskowanego czasu podpisania, więc certyfikat podpisującego, który był już nieważny w wybranym momencie dowodowym, pozostaje nieważny
VerifyDocumentTimeStampEx zwraca żądany i efektywny raport łańcucha, najlepsze czasy podpisu i archiwizacji, wybrane źródło dowodu, liczby znaczników czasu, stan przesuwania czasu oraz konkretny status historyczny
VerifyDocumentTimeStampExByName wykonuje przetwarzanie końcowe takiego raportu, wypełniając VerifySignatureTimeStampExVerifySignatureTimeStampExByName
TPDFlibTimeStampVerificationReport
Historyczna walidacja AdES
Result := Verifier.VerifyAdESHistoricalByName(
FieldName, 0, srmCacheOnly, ValidationTime, HistoricalReport);
VerifyAdESHistorical i VerifyAdESHistoricalByName najpierw walidują integralność podpisu i łańcuch podpisującego w żądanym czasie UTC
Jeśli łańcuch w żądanym czasie jest nieważny, weryfikator waliduje każdy znacznik czasu podpisu i każdy znacznik czasu dokumentu, którego podpisana rewizja pokrywa podpis docelowy, wywodzi najwcześniejszy zaufany czas podpisu i najpóźniejszy czas archiwizacji całego dokumentu i ponawia łańcuch w tych kontrolnych czasach dowodu istnienia
Zerowe ValidationTime wybiera bieżący czas UTC, a wartość niezerowa jest przekazywana wprost do polityki łańcucha certyfikatów jako UTC
srmNone dopuszcza, by zaufany znacznik czasu podpisu albo pokrywający znacznik czasu dokumentu dostarczył historyczny czas kontrolny
srmCacheOnly i srmOnline wymagają zaufanego znacznika czasu dokumentu pokrywającego kompletny bieżący dokument, zanim bieżący materiał DSS, VRI, CRL albo OCSP może być traktowany jako dowód historyczny; w przeciwnym razie raport zwraca ahsEvidenceNotArchived
Znacznik czasu dostarcza górną granicę tego, kiedy podpisane bajty istniały, a nie wywnioskowany czas podpisania, więc certyfikat podpisującego już nieważny w wybranym czasie dowodu pozostaje nieważny
TPDFlibAdESHistoricalValidationReport zwraca żądane i efektywne raporty łańcucha, najlepsze czasy podpisu i archiwizacji, wybrane źródło dowodu, liczby znaczników czasu, stan przesunięcia czasu i konkretny status historyczny
DeriveBaselineProfile postprocessuje taki raport, wypełniając BaselineProfile z podfiltra podpisu razem z dowodami znaczników czasu i DSS już zebranymi w raporcie
ahsValidAtRequestedTime | Integralność i łańcuch są ważne bez przesuwania czasu |
|---|---|
ahsValidAtProofTime | Łańcuch jest ważny w kontrolnym czasie wywiedzonym z zaufanego znacznika czasu |
ahsIntegrityInvalid | Wybrany podpis albo znacznik czasu dokumentu zawodzi walidację integralności albo ByteRange |
ahsNoTrustedProof | Żaden zaufany znacznik czasu nie pokrywa rewizji wybranego podpisu |
ahsEvidenceNotArchived | Żądana była kontrola odwołań, ale żaden zaufany znacznik czasu archiwum całego dokumentu nie zamyka materiału walidacyjnego |
ahsHistoricalTrustInvalid | Zaufane czasy dowodów istnieją, ale łańcuch podpisującego jest nieważny w każdym wywiedzonym czasie kontrolnym |
Metody zgodności
VerifySignatureGetSignatureMetadataGetSignerCertificateVerifySignerCertificateChain
ByIndex, ByName, GetSignatureMetadataByIndex i GetSignatureMetadataByName pozostają dostępne i wybierają pole 0 oraz podpisującego 0
Odpowiadające im metody GetSignerCertificateByIndex i GetSignerCertificateByName (
Zobacz również
TPDFlibEUTSLTrustSource, SetSignProcessDocMDP, SetSignProcessFieldLock, SetPAdESSignatureTimeStampToken