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

Voir aussi

TPDFlibSignatureVerifier