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 independientemente confiable antes de cargar un LOTL
Clear descarta el LOTL cargado y cada instantánea de TSL nacional, 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
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 solicitud; la propiedad RequireHTTPS (predeterminado 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 expiradas 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