TPDFlibEUTSLTrustSource

Zabezpečení a podpisy

Popis

Načte seznam EU seznamů důvěryhodných seznamů a jeho odkazované národní seznamy důvěryhodných služeb, ověří jejich podpisy XML a dodává časově uvědomělé kotvy důvěry do TPDFlibSignatureVerifier

Zdroj navíc vyhodnocuje prohlášení kvalifikovaných certifikátů, kvalifikátory důvěryhodných služeb, kritéria kvalifikace, rozšíření rozsahu služby a historii služby, aby klasifikovala kvalifikované elektronické podpisy a pečetě podle eIDAS

Jednotka

PDFlibEUTSL

Sestavení důvěry

Function AddLOTLSigningCertificateDER(
  Const CertificateDER: AnsiString): Boolean;
Function AddLOTLSigningCertificateFromFile(
  Const CertificateFile: WideString): Boolean;
Procedure ClearLOTLSigningCertificates;
Procedure Clear;

Aplikace musí před načtením LOTL přichytit alespoň jeden nezávisle důvěryhodný podpisový certifikát LOTL

Clear zahodí načtený LOTL a každý národní snímek TSL včetně jejich ukazatelů, služeb a diagnostického stavu, aniž by se dotkl přichycených podpisových certifikátů LOTL; instance je pak připravena načíst čerstvý snímek

Podpisový certifikát vložený do XML KeyInfo musí odpovídat přichycenému certifikátu bajt po bajtu, takže samo-deklarovaný podepisující si nemůže ustanovit vlastní důvěru

Každý národní TSL musí být zase podepsán certifikátem neseným odpovídajícím, už ověřeným ukazatelem LOTL

Načítání důvěryhodných seznamů

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;

Načítání XML zakazuje DTD a externí entity, aplikuje konfigurovatelný limit velikosti, vyžaduje jednu obálkovou signaturu nad kořenem dokumentu a odmítá oddělené reference, duplicitní podpisy, selhání digestů, nesoulad podepisujících a nesoulad teritorií

LoadLOTLFromURL a LoadTSLFromURL vyžadují HTTPS jako výchozí a na každý požadavek používají NetworkTimeoutMS a MaxXMLBytes; vlastnost RequireHTTPS (výchozí True) řídí kontrolu schématu a její vypnutí je určeno jen pro kontrolovaná testovací prostředí

RefreshAllTSLs stáhne a ověří každý aktuální ukazatel dřív, než vymění aktivní sadu služeb, takže částečné selhání sítě nebo podpisu zachová předchozí ověřený snímek

Prošlé snímky LOTL a TSL selhávají uzavřeně jako výchozí a po čase NextUpdate zůstávají nepoužitelné; AllowExpiredLists je k dispozici jen pro kontrolované pracovní postupy archivace nebo diagnostiky

Kontrola

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;

Informace ukazatele vystavují teritorium, lokaci, typ MIME a povolený počet podepisujících TSL

Informace o službě vystavují aktuální název služby, typ, stav, čas zahájení stavu, počet certifikátů a počet historie

GetLOTLLocation, GetLOTLNextUpdate, GetRevision a GetLastError vystavují stav snímku a diagnostiky

Ověření 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 ukládá nevlastnící odkaz, takže zdroj musí zůstat naživu, dokud není odpojen nebo ověřovatel zničen

GetTrustAnchors(VerificationTime, Certificates) a EvaluateCertificateChain(Certificates, VerificationTime, Report) jsou dvě háčky, které ověřovatel volá na zdroj: první vrací kotev kódovanou v DER služeb důvěryhodných v požadovaný čas, druhá klasifikuje ověřený řetěz do TPDFlibSignatureQualificationReport pomocí sady služeb platné v ten okamžik; aplikace je obvykle volají nepřímo přes ověřovatel, nikoli přímo

Ověřovatel kombinuje zdrojové kotvy s jakýkoli ručními vlastními kotvami v jednom výlučném stroji řetězů a ukládá ten stroj podle revize zdroje a času ověření

Když je přiřazen zdroj a ani on, ani ruční sada nedodávají kotvu, ověření selže uzavřeně, místo aby spadlo na systémové kořeny Windows

Zpráva o kvalifikaci

TPDFlibSignatureChainReport.QualificationReport vrací TPDFlibSignatureQualificationReport po vyhodnocení platného řetězu

Zpráva identifikuje teritorium služby, název, typ, stav, čas zahájení stavu, aplikované kvalifikátory, účel certifikátu, kvalifikovaný stav a stav kvalifikovaného zařízení pro tvorbu podpisu

Hodnoty stavů rozlišují výsledky nevyhodnoceno, nevztahuje se, nekvalifikováno, kvalifikovaný certifikát, kvalifikovaný elektronický podpis a kvalifikovaná elektronická pečeť, s oddělenými variantami QSCD

Viz také

TPDFlibSignatureVerifier