TPDFlibEUTSLTrustSource
Sécurité et signatures
Description
Charge une liste européenne de listes de confiance et ses listes nationales de services de confiance référencées, vérifie leurs signatures XML et fournit des ancres de confiance sensibles au temps à TPDFlibSignatureVerifier
La source évalue aussi les déclarations de certificats qualifiés, les qualificatifs de services de confiance, les critères de qualification, les extensions de périmètre de service et l'historique de service pour classer les signatures et sceaux électroniques qualifiés sous eIDAS
Unité
PDFlibEUTSL
Amorçage de la confiance
Function AddLOTLSigningCertificateDER(
Const CertificateDER: AnsiString): Boolean;
Function AddLOTLSigningCertificateFromFile(
Const CertificateFile: WideString): Boolean;
Procedure ClearLOTLSigningCertificates;
Procedure Clear;
Une application doit épingler au moins un certificat de signature LOTL indépendamment fiable avant de charger une LOTL
Clear abandonne la LOTL chargée et chaque instantané national de TSL, leurs pointeurs, services et état de diagnostic, sans toucher aux certificats de signature LOTL épinglés ; l'instance est alors prête à charger un instantané neuf
Le certificat de signature incorporé dans
Le certificat de signature incorporé dans le KeyInfo XML doit correspondre octet par octet à un certificat épinglé, si bien un signataire autoproclamé ne peut pas établir sa propre confiance
Chaque TSL nationale doit à son tour être signée par un certificat porté par le pointeur LOTL correspondant, déjà vérifié
Chargement des listes de confiance
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;
Le chargement XML désactive les DTD et les entités externes, applique une limite de taille configurable, exige une signature enveloppée sur la racine du document, et rejette les références détachées, signatures dupliquées, échecs de condensat, non-correspondances de signataire et de territoire
LoadLOTLFromURL et LoadTSLFromURL exigent HTTPS par défaut et appliquent NetworkTimeoutMS et MaxXMLBytes à chaque requête ; la propriété RequireHTTPS (par défaut True) contrôle la vérification du schéma, et sa désactivation n'est prévue que pour des environnements de test contrôlés
RefreshAllTSLs
NextUpdate télécharge et valide chaque pointeur courant avant de remplacer l'ensemble de services actif, de sorte qu'un échec partiel de réseau ou de signature préserve l'instantané vérifié précédent
Les instantanés LOTL et TSL expirés échouent fermés par défaut et restent inutilisables après leur heure AllowExpiredLists ;
Inspection
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;
Les informations de pointeurs exposent le territoire, l'emplacement, le type MIME et le nombre de signataires TSL autorisés
Les informations de service exposent le nom du service actuel, le type, le statut, l'heure de début du statut, le nombre de certificats et le nombre d'historiques
GetLOTLLocation, GetLOTLNextUpdate, GetRevision et GetLastError exposent l'état d'instantané et de diagnostic
Vérification de signature
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) et EvaluateCertificateChain(Certificates, VerificationTime, Report) sont les deux crochets que le vérificateur invoque sur la source : le premier renvoie les ancres codées en DER des services fiables à l'heure demandée, le second classe une chaîne validée dans un TPDFlibSignatureQualificationReport en utilisant l'ensemble de services en vigueur à cette heure ; les applications les appellent normalement de façon indirecte via le vérificateur plutôt que directement
Le vérificateur combine les ancres de source avec toute ancre personnalisée manuelle dans un moteur de chaîne exclusif et met ce moteur en cache par révision de source et temps de vérification
Quand une source est affectée et que ni elle ni le jeu manuel ne fournissent une ancre, la vérification échoue fermée au lieu de retomber sur les racines système de Windows
Rapport de qualification
TPDFlibSignatureChainReport.QualificationReport renvoie un TPDFlibSignatureQualificationReport après l'évaluation d'une chaîne valide
Le rapport identifie le territoire du service, le nom, le type, le statut, l'heure de début du statut, les qualificatifs appliqués, la finalité du certificat, le statut de qualification et l'état du dispositif de création de signature qualifié
Les valeurs de statut distinguent non évalué, non applicable, non qualifié, certificat qualifié, signature électronique qualifiée et sceau électronique qualifié, avec des variantes QSCD séparées