TPDFlibEUTSLTrustSource

Säkerhet och signaturer

Beskrivning

Läser in en EU-förteckning över förtroendeförteckningar och dess refererade nationella förtroendelistor för tjänster, verifierar deras XML-signaturer och levererar tidsmedvetna förtroendeankare till TPDFlibSignatureVerifier

Källan utvärderar också kvalificerade certifikatuttalanden, kvalificerare för betrodda tjänster, kvalificeringskriterier, tjänsteomfångsutvidgningar och tjänstehistorik för att klassificera kvalificerade elektroniska signaturer och förseglingar enligt eIDAS

Enhet

PDFlibEUTSL

Uppbyggnad av förtroende

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

Ett program måste fästa minst ett oberoende betrott LOTL-signeringscertifikat innan en LOTL läses in

Clear förkastar den inlästa LOTL och varje nationell TSL-ögonblicksbild, deras pekare, tjänster och diagnostiktillstånd, utan att röra de fastfästa LOTL-signeringscertifikaten; instansen är sedan redo att läsa in en ny ögonblicksbild Signeringscertifikatet som bäddas in i XML:ens

KeyInfo måste matcha ett fastfäst certifikat byte för byte, så att en självdeklarerad undertecknare inte kan etablera sitt eget förtroende

Varje nationell TSL måste i sin tur vara signerad av ett certifikat som bärs av motsvarande, redan verifierade LOTL-pekare

Inläsning av förtroendelistor

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;

XML-inläsning inaktiverar DTD:er och externa entiteter, tillämpar en konfigurerbar storleksgräns, kräver en omslutande signatur över dokumentroten och avvisar fristående referenser, dubblettsignaturer, sammanfattningsfel, felaktiga signerare och territoravvikelser

XML-inläsning inaktiverar DTD:er och externa entiteter, tillämpar en konfigurerbar storleksgräns, kräver en omsluten signatur över dokumentroten och avvisar fristående referenser, dubblettsignaturer, sammandragsfel, undertecknaravvikelser och territorieavvikelser LoadLOTLFromURL och LoadTSLFromURL kräver HTTPS som standard och tillämpar NetworkTimeoutMS och MaxXMLBytes på varje begäran; egenskapen RequireHTTPS (standard True) styr schemakontrollen, och att stänga av den är endast avsett för kontrollerade testmiljöer

RefreshAllTSLs

NextUpdate hämtar och validerar varje aktuell pekare innan den aktiva tjänstemängden ersätts, så att ett partiellt nätverks- eller signaturfel bevarar den tidigare verifierade ögonblicksbilden Utgångna LOTL- och TSL-ögonblicksbilder misslyckas stängt som standard och förblir oanvändbara efter sin AllowExpiredLists-tid;

Inspektion

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;

Pekarinformationen exponerar territorium, plats, MIME-typ och tillåtet antal TSL-signerare

Tjänsteinformationen exponerar aktuellt tjänstenamn, typ, status, statusens starttid, certifikatantal och historikantal

Pekarinformation exponerar territorium, plats, MIME-typ och antal tillåtna TSL-undertecknare Tjänsteinformation exponerar aktuellt tjänstenamn, typ, status, starttid för status, antal certifikat och antal historikposter GetLOTLLocation, GetLOTLNextUpdate, GetRevision och GetLastError exponerar ögonblicksbilds- och diagnostiktillstånd

Signaturverifiering

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

GetTrustAnchors(VerificationTime, Certificates) lagrar en icke-ägd referens, så källan måste förbliva vid liv tills den kopplas loss eller verifieraren förstörs EvaluateCertificateChain(Certificates, VerificationTime, Report) och TPDFlibSignatureQualificationReport är de två hookfunktioner som verifieraren anropar på källan: den första returnerar de DER-kodade ankarna för tjänster som är betrodda vid den begärda tiden, den andra klassificerar en validerad kedja till en

Verifieraren kombinerar källankare med eventuella manuella egna ankare i en exklusiv kedjemotor och cachar den motorn efter källrevision och verifieringstid

När en källa är tilldelad och varken den eller den manuella mängden tillhandahåller ett ankare misslyckas verifieringen stängt i stället för att falla tillbaka på Windows-systemrötter

Kvalificeringsrapport

TPDFlibSignatureChainReport.QualificationReport returnerar TPDFlibSignatureQualificationReport efter att en giltig kedja har utvärderats

Rapporten identifierar tjänsteterritorium, namn, typ, status, statusens starttid, tillämpade kvalificerare, certifikatsyfte, kvalificerad status och status för kvalificerad signaturskapande enhet

Statusvärden skiljer ej utvärderat, ej tillämpligt, ej kvalificerat, kvalificerat certifikat, kvalificerad elektronisk signatur och kvalificerat elektroniskt sigill, med separata QSCD-varianter

Rapporten identifierar tjänstens territorium, namn, typ, status, starttid för status, tillämpade kvalificerare, certifikatändamål, kvalificerad status och statusen för kvalificerad signeringsskapandeenhetStatusvärden skiljer resultaten inte utvärderad, inte tillämplig, inte kvalificerad, kvalificerat certifikat, kvalificerad elektronisk signatur och kvalificerad elektronisk försegling, med separata QSCD-varianterSe även

TPDFlibSignatureVerifier