TPDFlibEUTSLTrustSource

Seguridad y firmas

Descripción

Carga una lista de la UE de listas de confianza y sus listas nacionales de servicios de confianza referenciadas, verifica sus firmas XML y suministra anclas de confianza conscientes del tiempo a TPDFlibSignatureVerifier

La fuente también evalúa declaraciones de certificados calificados, calificadores de servicios de confianza, criterios de calificación, extensiones de ámbito de servicio e historial de servicio para clasificar firmas y sellos electrónicos calificados bajo eIDAS

Unidad

PDFlibEUTSL

Arranque de confianza

Function AddLOTLSigningCertificateDER(
  Const CertificateDER: AnsiString): Boolean;
Function AddLOTLSigningCertificateFromFile(
  Const CertificateFile: WideString): Boolean;
Procedure ClearLOTLSigningCertificates;
Procedure Clear;

Una aplicación debe fijar al menos un certificado de firma LOTL con confianza independiente antes de cargar un LOTL

Clear descarta el LOTL cargado y cada instantánea nacional de TSL, sus punteros, servicios y estado de diagnóstico, sin tocar los certificados de firma LOTL fijados; la instancia queda entonces lista para cargar una instantánea fresca El certificado de firma incrustado en

El certificado de firma incrustado en el KeyInfo XML debe coincidir byte a byte con un certificado fijado, de modo que un firmante autodeclarado no pueda establecer su propia confianza

Cada TSL nacional debe a su vez estar firmada por un certificado llevado en el puntero LOTL correspondiente, ya verificado

Carga de listas de confianza

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;

La carga de XML desactiva los DTD y las entidades externas, aplica un límite de tamaño configurable, exige una firma envolvente sobre la raíz del documento, y rechaza referencias separadas, firmas duplicadas, fallos de resumen, firmantes no coincidentes y territorios no coincidentes

LoadLOTLFromURL y LoadTSLFromURL exigen HTTPS por defecto y aplican NetworkTimeoutMS y MaxXMLBytes a cada petición; la propiedad RequireHTTPS (por defecto True) controla la comprobación del esquema, y apagarla está pensada solo para entornos de prueba controlados

RefreshAllTSLs

NextUpdate descarga y valida cada puntero actual antes de reemplazar el conjunto de servicios activo, de modo que un fallo parcial de red o de firma preserva la instantánea verificada anterior Las instantáneas LOTL y TSL caducadas fallan de forma cerrada de forma predeterminada y permanecen inutilizables después de su hora AllowExpiredLists;

Inspección

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;

La información de punteros expone territorio, ubicación, tipo MIME y número de firmantes TSL permitidos

La información de servicios expone el nombre del servicio actual, tipo, estado, hora de inicio del estado, número de certificados y número de historial

GetLOTLLocation, GetLOTLNextUpdate, GetRevision y GetLastError exponen el estado de instantánea y de diagnóstico

Verificación de firmas

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) y EvaluateCertificateChain(Certificates, VerificationTime, Report) son los dos enganches que el verificador invoca sobre la fuente: el primero devuelve las anclas codificadas en DER de los servicios confiables a la hora solicitada, el segundo clasifica una cadena validada en un TPDFlibSignatureQualificationReport usando el conjunto de servicios vigente a esa hora; las aplicaciones normalmente los llaman de forma indirecta a través del verificador en lugar de directamente

El verificador combina las anclas del origen con cualquier ancla personalizada manual en un motor de cadena exclusivo y almacena ese motor en caché por revisión del origen y tiempo de verificación

Cuando se asigna un origen y ni este ni el conjunto manual suministran un ancla, la verificación falla de forma cerrada en lugar de recurrir a las raíces del sistema de Windows

Informe de calificación

TPDFlibSignatureChainReport.QualificationReport devuelve un TPDFlibSignatureQualificationReport después de evaluar una cadena válida

El informe identifica el territorio del servicio, el nombre, el tipo, el estado, la hora de inicio del estado, los calificadores aplicados, el propósito del certificado, el estado de calificación y el estado del dispositivo de creación de firma calificado

Los valores de estado distinguen no evaluado, no aplicable, no calificado, certificado calificado, firma electrónica calificada y sello electrónico calificado, con variantes QSCD separadas

Véase también

TPDFlibSignatureVerifier