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

IntegrityResultKryptograficzny wynik integralności CMS lub starszego formatu PKCS#7 dla wybranego podpisującego
CoverageStatusscInvalid, scSignedRevision, or scWholeDocument
ByteRangeValidTrue tylko wtedy, gdy wszystkie zakresy są ograniczone, a podpisana rewizja kończy się własnym znacznikiem %%EOF
ContentsGapValidTrue tylko wtedy, gdy pominięte bajty to dokładnie wybrany szesnastkowy token /Contents
HasLaterRevisionsTrue, gdy wybrany podpis uwierzytelnia wcześniejszą rewizję przyrostową, a dalsze bajty istnieją
SignedRevisionLengthDługość w bajtach rewizji uwierzytelnionej przez wybrany podpis
PermissionReportPrzetworzone 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

ahsValidAtRequestedTimeIntegralność i łańcuch są ważne bez przesuwania czasu
ahsValidAtProofTimeŁańcuch jest ważny w kontrolnym czasie wywiedzonym z zaufanego znacznika czasu
ahsIntegrityInvalidWybrany 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
ahsHistoricalTrustInvalidZaufane 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