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