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