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

Zobacz również

TPDFlibSignatureVerifier