TPDFlibEUTSLTrustSource

Sikkerhed og signaturer

Beskrivelse

Indlæser en EU-liste over betroede lister og dens refererede nationale betroede servicelister, verificerer deres XML-signaturer og leverer tidsbevidste tillidsforankringer til TPDFlibSignatureVerifier

Kilden evaluerer også kvalificeret-certifikat-udsagn, betroet service-kvalificerere, kvalifikationskriterier, serviceomfangsudvidelser og servicehistorik for at klassificere kvalificerede elektroniske signaturer og forseglinger under eIDAS

Enhed

PDFlibEUTSL

Tillids-bootstrap

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

En applikation skal fastgøre mindst ét uafhængigt betroet LOTL-signeringscertifikat, før den indlæser en LOTL

Clear kasserer det indlæste LOTL og hvert nationalt TSL-snapshot, deres pejere, services og diagnostiske tilstand uden at røre de fastgjorte LOTL-signeringscertifikater; instansen er derefter klar til at indlæse et friskt snapshot

Signeringscertifikatet indlejret i XML KeyInfo skal matche et fastgjort certifikat byte for byte, så en selvdeklareret underskriver ikke kan etablere sin egen tillid

Hver national TSL skal til gengæld være signeret af et certifikat båret i den matchende, allerede verificerede LOTL-pejer

Indlæsning af betroede lister

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-indlæsning slår DTD'er og eksterne entiteter fra, anvender en konfigurerbar størrelsesgrænse, kræver én omsluttet signatur over dokumentroden og afviser adskilte referencer, duplikatsignaturer, digest-fejl, underskriver-uoverensstemmelser og territorie-uoverensstemmelser

LoadLOTLFromURL og LoadTSLFromURL kræver HTTPS som standard og anvender NetworkTimeoutMS og MaxXMLBytes på hver anmodning; egenskaben RequireHTTPS (standard True) styrer skema-tjekket, og at slå den fra er kun beregnet til kontrollerede testmiljøer

RefreshAllTSLs downloader og validerer hver aktuel pejer, før det aktive servicesæt erstattes, så en delvis netværks- eller signaturfejl bevarer det forrige verificerede snapshot

Udløbne LOTL- og TSL-snapshots fejler lukket som standard og forbliver ubrugelige efter deres NextUpdate-tid; AllowExpiredLists er kun tilgængelig til kontrollerede arkiv- eller diagnostiske arbejdsgange

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;

Pejeroplysninger eksponerer territorie, placering, MIME-type og tilladt antal TSL-underskrivere

Serviceoplysninger eksponerer det aktuelle servicenavn, type, status, statusstarttid, certifikatantal og historikantal

GetLOTLLocation, GetLOTLNextUpdate, GetRevision og GetLastError eksponerer snapshot- og diagnostisk tilstand

Signaturverifikation

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 gemmer en ikke-ejende reference, så kilden skal forblive i live, indtil den frakobles eller verifikatoren ødelægges

GetTrustAnchors(VerificationTime, Certificates) og EvaluateCertificateChain(Certificates, VerificationTime, Report) er de to kroge, verifikatoren kalder på kilden: den første returnerer DER-kodede forankringer af services, der er betroede på det anmodede tidspunkt, den anden klassificerer en valideret kæde i en TPDFlibSignatureQualificationReport ved hjælp af det servicesæt, der var aktuelt på det tidspunkt; applikationer kalder dem normalt indirekte gennem verifikatoren i stedet for direkte

Verifikatoren kombinerer kildeforankringer med alle manuelle tilpassede forankringer i én eksklusiv kædemotor og mellemlagrer den motor efter kilderevision og verifikationstid

Når en kilde er tildelt, og hverken den eller det manuelle sæt leverer en forankring, fejler verifikation lukket i stedet for at falde tilbage på Windows-systemrødder

Kvalifikationsrapport

TPDFlibSignatureChainReport.QualificationReport returnerer TPDFlibSignatureQualificationReport, efter en gyldig kæde er evalueret

Rapporten identificerer serviceterritoriet, navn, type, status, statusstarttid, anvendte kvalificerere, certifikatformål, kvalificeret status og status for kvalificeret signaturoprettelsesenhed

Statusværdier skelner ikke evalueret, ikke anvendelig, ikke kvalificeret, kvalificeret certifikat, kvalificeret elektronisk signatur og kvalificeret elektronisk forsegling, med separate QSCD-varianter

Se også

TPDFlibSignatureVerifier