TPDFlibEUTSLTrustSource

Sicurezza e firme

Descrizione

Carica una lista UE di elenchi di attendibilità e i suoi elenchi nazionali di servizi di attendibilità referenziati, verifica le loro firme XML e fornisce ancoraggi di attendibilità sensibili al tempo a TPDFlibSignatureVerifier

La sorgente valuta anche le dichiarazioni di certificati qualificati, qualificatori di servizi di attendibilità, criteri di qualificazione, estensioni di ambito di servizio e storico del servizio per classificare firme e sigilli elettronici qualificati ai sensi di eIDAS

Unità

PDFlibEUTSL

Inizializzazione dell'attendibilità

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

Un'applicazione deve fissare almeno un certificato di firma LOTL indipendentemente attendibile prima di caricare un LOTL

Clear scarta il LOTL caricato e ogni istantanea TSL nazionale, i loro puntatori, servizi e stato diagnostico, senza toccare i certificati di firma LOTL fissati; l'istanza è quindi pronta a caricare una nuova istantanea Il certificato di firma incorporato nel

Il certificato di firma incorporato nel KeyInfo XML deve coincidere byte per byte con un certificato bloccato, così un firmatario autodichiarato non può stabilire la propria attendibilità

Ogni TSL nazionale deve a sua volta essere firmata da un certificato portato dal puntatore LOTL corrispondente, già verificato

Caricamento degli elenchi attendibili

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;

Il caricamento XML disattiva i DTD e le entità esterne, applica un limite di dimensione configurabile, richiede una firma avvolta sulla radice del documento, e rifiuta riferimenti staccati, firme duplicate, fallimenti di digest, firmatari non corrispondenti e territori non corrispondenti

LoadLOTLFromURL e LoadTSLFromURL richiedono HTTPS per impostazione predefinita e applicano NetworkTimeoutMS e MaxXMLBytes a ogni richiesta; la proprietà RequireHTTPS (predefinito True) controlla il controllo dello schema, e spegnerla è pensata solo per ambienti di test controllati

RefreshAllTSLs

NextUpdate scarica e valida ogni puntatore corrente prima di sostituire l'insieme di servizi attivo, così un fallimento parziale di rete o di firma preserva l'istantanea verificata precedente Le istantanee LOTL e TSL scadute falliscono in chiusura (fail closed) per impostazione predefinita e restano inutilizzabili dopo il loro tempo AllowExpiredLists;

Ispezione

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;

Le informazioni sui puntatori espongono territorio, posizione, tipo MIME e numero di firmatari TSL consentiti

Le informazioni di servizio espongono il nome del servizio corrente, tipo, stato, ora d'inizio dello stato, numero di certificati e numero di storico

GetLOTLLocation, GetLOTLNextUpdate, GetRevision e GetLastError espongono lo stato di snapshot e diagnostico

Verifica della firma

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) e EvaluateCertificateChain(Certificates, VerificationTime, Report) sono i due ganci che il verificatore invoca sulla sorgente: il primo restituisce le ancore codificate in DER dei servizi attendibili all'ora richiesta, il secondo classifica una catena validata in un TPDFlibSignatureQualificationReport usando l'insieme di servizi in vigore a quell'ora; le applicazioni di solito li chiamano indirettamente tramite il verificatore invece che direttamente

Il verificatore combina le ancore dell'origine con qualsiasi ancora personalizzata manuale in un motore di catena esclusivo e memorizza quel motore in cache per revisione dell'origine e tempo di verifica

Quando viene assegnata una origine e né questa né il set manuale forniscono un'ancora, la verifica fallisce in modo chiuso invece di ricadere sulle radici di sistema di Windows

Report di qualificazione

TPDFlibSignatureChainReport.QualificationReport restituisce un TPDFlibSignatureQualificationReport dopo la valutazione di una catena valida

Il report identifica il territorio del servizio, il nome, il tipo, lo stato, l'ora di inizio dello stato, i qualificatori applicati, la finalità del certificato, lo stato di qualificazione e lo stato del dispositivo di creazione di firma qualificato

I valori di stato distinguono non valutato, non applicabile, non qualificato, certificato qualificato, firma elettronica qualificata e sigillo elettronico qualificato, con varianti QSCD separate

Vedere anche

TPDFlibSignatureVerifier