TPDFlibEUTSLTrustSource
Zabezpieczenia i podpisy
Opis
Wczytuje unijną listę list zaufania i referencjonowane przez nią krajowe listy zaufanych usług, weryfikuje ich podpisy XML i dostarcza świadome czasu kotwice zaufania dla TPDFlibSignatureVerifier
Źródło ocenia też stwierdzenia kwalifikowanych certyfikatów, kwalifikatory zaufanych usług, kryteria kwalifikacji, rozszerzenia zakresu usług i historię usług, by klasyfikować kwalifikowane podpisy i pieczęcie elektroniczne według eIDAS
Jednostka
PDFlibEUTSL
Zakotwiczenie zaufania
Function AddLOTLSigningCertificateDER(
Const CertificateDER: AnsiString): Boolean;
Function AddLOTLSigningCertificateFromFile(
Const CertificateFile: WideString): Boolean;
Procedure ClearLOTLSigningCertificates;
Procedure Clear;
Aplikacja musi przypiąć co najmniej jeden niezależnie zaufany certyfikat podpisujący LOTL przed wczytaniem LOTL
Clear porzuca wczytany LOTL i każdy krajowy snapshot TSL, ich wskaźniki, usługi i stan diagnostyczny, nie dotykając przypiętych certyfikatów podpisujących LOTL; instancja jest potem gotowa wczytać świeży snapshot
Certyfikat podpisujący wbudowany w XML KeyInfo musi zgadzać się z przypiętym certyfikatem bajt w bajt, więc podpisujący, który sam siebie deklaruje, nie może ustanowić własnego zaufania
Każdy krajowy TSL musi z kolei być podpisany certyfikatem niesionym przez pasujący, już zweryfikowany wskaźnik LOTL
Wczytywanie zaufanych list
Function LoadLOTLFromString(Const XMLData: AnsiString): Boolean;
Function LoadLOTLFromFile(Const FileName: WideString): Boolean;
Function LoadLOTLFromURL(Const URL: WideString): Boolean;
Function LoadTSLFromString(PointerIndex: Integer;
Const XMLData: AnsiString): Boolean;
Function LoadTSLFromFile(PointerIndex: Integer;
Const FileName: WideString): Boolean;
Function LoadTSLFromURL(PointerIndex: Integer): Boolean;
Function RefreshAllTSLs: Integer;
Wczytywanie XML wyłącza DTD i encje zewnętrzne, stosuje konfigurowalny limit rozmiaru, wymaga jednego otoczonego podpisu nad korzeniem dokumentu i odrzuca odseparowane referencje, zduplikowane podpisy, błędy skrótów, niezgodności podpisującego i niezgodności terytorium
LoadLOTLFromURL i LoadTSLFromURL domyślnie wymagają HTTPS i stosują NetworkTimeoutMS oraz MaxXMLBytes do każdego żądania; właściwość RequireHTTPS (domyślnie True) steruje kontrolą schematu, a jej wyłączenie jest przeznaczone wyłącznie do kontrolowanych środowisk testowych
RefreshAllTSLs pobiera i waliduje każdy bieżący wskaźnik przed zastąpieniem aktywnego zestawu usług, więc częściowe niepowodzenie sieciowe albo podpisu zachowuje poprzedni zweryfikowany snapshot
Przedawnione snapshoty LOTL i TSL domyślnie zawodzą zamknięte i pozostają nieużyteczne po swoim czasie NextUpdate; AllowExpiredLists jest dostępne wyłącznie dla kontrolowanych przepływów archiwizacji albo diagnostyki
Inspekcja
Function GetPointerCount: Integer;
Function GetPointerInfo(Index: Integer;
Out Info: TPDFlibEUTSLPointerInfo): Boolean;
Function GetPointerSigningCertificateDER(PointerIndex,
CertificateIndex: Integer; Out CertificateDER: AnsiString): Boolean;
Function GetServiceCount: Integer;
Function GetServiceInfo(Index: Integer;
Out Info: TPDFlibEUTSLServiceInfo): Boolean;
Function GetServiceCertificateDER(ServiceIndex, CertificateIndex: Integer;
VerificationTime: TDateTime;
Out CertificateDER: AnsiString): Boolean;
Informacje wskaźnika ujawniają terytorium, lokalizację, typ MIME i dozwoloną liczbę podpisujących TSL
Informacje usługi ujawniają bieżącą nazwę usługi, typ, status, czas rozpoczęcia statusu, liczbę certyfikatów i liczbę wpisów historii
GetLOTLLocation, GetLOTLNextUpdate, GetRevision i GetLastError ujawniają stan snapshotu i diagnostyki
Weryfikacja podpisu
var
TrustSource: TPDFlibEUTSLTrustSource;
ChainReport: TPDFlibSignatureChainReport;
begin
TrustSource:= TPDFlibEUTSLTrustSource.Create;
try
TrustSource.AddLOTLSigningCertificateFromFile('EU-LOTL-Signer.cer');
if not TrustSource.LoadLOTLFromURL(LOTLURL) then
raise Exception.Create(String(TrustSource.GetLastError));
if TrustSource.RefreshAllTSLs<> TrustSource.GetPointerCount then
raise Exception.Create(String(TrustSource.GetLastError));
Verifier.SetTrustSource(TrustSource);
try
Result:= Verifier.VerifySignerCertificateChainEx(
0, 0, srmOnline, 0, ChainReport);
finally
Verifier.SetTrustSource(nil);
end;
finally
TrustSource.Free;
end;
end;
SetTrustSource zapisuje referencję bez własności, więc źródło musi pozostać żywe, dopóki nie zostanie odczepione albo weryfikator nie zostanie zniszczony
GetTrustAnchors(VerificationTime, Certificates) i EvaluateCertificateChain(Certificates, VerificationTime, Report) to dwa haki, które weryfikator wywołuje na źródle: pierwszy zwraca DER-kodowane kotwice usług zaufanych w żądanym czasie, druga klasyfikuje zwalidowany łańcuch do TPDFlibSignatureQualificationReport przy użyciu zestawu usług bieżącego w tym czasie; aplikacje normalnie wywołują je pośrednio przez weryfikatora, a nie bezpośrednio
Weryfikator łączy kotwice źródła z wszelkimi ręcznymi własnymi kotwicami w jednym ekskluzywnym silniku łańcuchów i podręcznie zapisuje ten silnik według rewizji źródła i czasu weryfikacji
Gdy źródło jest przypisane i ani ono, ani zestaw ręczny nie dostarczają kotwicy, weryfikacja zawodzi zamknięte zamiast wracać do systemowych korzeni Windows
Raport kwalifikacji
TPDFlibSignatureChainReport.QualificationReport zwraca TPDFlibSignatureQualificationReport po ocenie ważnego łańcucha
Raport identyfikuje terytorium usługi, nazwę, typ, status, czas rozpoczęcia statusu, zastosowane kwalifikatory, przeznaczenie certyfikatu, status kwalifikacji i status kwalifikowanego urządzenia do tworzenia podpisów
Wartości statusu rozróżniają: nie oceniono, nie dotyczy, niekwalifikowane, kwalifikowany certyfikat, kwalifikowany elektroniczny podpis i kwalifikowana elektroniczna pieczęć, z osobnymi wariantami QSCD