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