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