TPDFlibSignatureVerifier

Seguridad y firmas

Descripción

Enumera los campos de firma PDF y los firmantes CMS, valida una firma seleccionada sin cargar el PDF completo en memoria e informa de la revisión incremental de la propia firma seleccionada por separado del archivo actual El verificador acepta un archivo, un flujo propiedad del llamador o una cadena de bytes ANSI a través de

OpenPDF, OpenPDFStream u OpenPDFString

Selección

Count := Verifier.GetSignatureCount;
Verifier.GetSignatureFieldName(0, FieldName);
SignerCount := Verifier.GetSignerCount(0);
Result := Verifier.VerifySignatureByName(FieldName, 0, Report);

VerifySignatureByIndex selecciona un campo PDF por índice de base cero, mientras que VerifySignatureByName usa el nombre completo del campo AcroForm, y ambos métodos aceptan un índice de firmante CMS de base cero

Informe de verificación de firmas

IntegrityResultResultado de integridad criptográfica CMS o PKCS#7 clásico para el firmante seleccionado
CoverageStatusscInvalid, scSignedRevision, or scWholeDocument
ByteRangeValidTrue solo cuando todos los intervalos están acotados y la revisión firmada termina en su propio %%EOF
ContentsGapValidTrue solo cuando los bytes omitidos son exactamente el token hexadecimal /Contents seleccionado
HasLaterRevisionsTrue cuando la firma seleccionada autentica una revisión incremental anterior y existen bytes posteriores
SignedRevisionLengthLongitud en bytes de la revisión autenticada por la firma seleccionada
PermissionReportRestricciones DocMDP y FieldMDP analizadas para la firma seleccionada

Certificación y permisos de campos

GetSignaturePermissionInfo y GetSignaturePermissionInfoByName devuelven TPDFlibSignaturePermissionReport El informe distingue una transformación DocMDP válida de una referencia

/Perms /DocMDP del catálogo coincidente y comprueba que el diccionario /Lock de un campo coincide con su transformación FieldMDP, su acción y su lista de nombres de campo

Cadena de certificados y revocación

VerifySignerCertificateChainByIndex y VerifySignerCertificateChainByName ejecutan la validación de cadena predeterminada para una firma y un firmante seleccionados explícitamente

VerifySignerCertificateChainEx y VerifySignerCertificateChainExByName añaden certificados X.509 validados a un conjunto de anclajes de confianza en memoria, sin duplicados Cuando el conjunto no está vacío, cada cadena de firmante y de marca de tiempo se construye con un motor de confianza exclusivo que usa el conjunto para las raíces de CA y las anclas de certificado explícitas sin consultar los almacenes de Windows srmNone ni srmCacheOnly El motor exclusivo y el almacén de raíces analizado se almacenan en caché en el verificador y se reutilizan hasta que cambia el conjunto de anclas Este aislamiento permite a una aplicación aplicar una directiva de confianza corporativa privada sin instalar certificados ni heredar confianza del equipo que no le atañe Pertenecer al conjunto de anclas de confianza no elude las comprobaciones de validez del certificado, de uso de clave, de firma ni las de revocación solicitadas srmOnline libera el conjunto y restaura el motor de confianza del sistema Windows predeterminado para las comprobaciones posteriores

TPDFlibSignatureChainReport separa TrustStatus, los errores de cadena y de política de Windows, los recuentos de evidencia DSS o VRI, la atribución OCSP exacta, el estado OCSP, el motivo de revocación, la frescura y los errores nativos

Los certificados incrustados y el material de validación pueden completar una cadena, pero no convierten una raíz no confiable en una raíz de confianza

La evidencia OCSP de DSS o VRI se acepta solo cuando su firma del respondedor, el uso del emisor o del respondedor delegado, el CertID, el estado y la frescura coinciden con el certificado seleccionado

Fuentes externas de confianza

Verifier.AddTrustAnchorDER(RootCertificateDER);
Verifier.AddTrustAnchorFromFile('BusinessRoot.cer');
AnchorCount := Verifier.GetTrustAnchorCount;
Verifier.ClearTrustAnchors;

AddTrustAnchorDER adjunta un AddTrustAnchorFromFile sin propiedad que puede suministrar anclas específicas de tiempo y evaluar una cadena de certificados construida con éxito Las anclas del origen se combinan con las anclas personalizadas manuales en el mismo motor de cadena exclusivo, que se almacena en caché por revisión del origen y tiempo de verificación Asignar un origen desactiva el recurso a las raíces del sistema de Windows cuando no hay disponible ninguna ancla de origen o manual Una evaluación del origen con éxito rellena

Cuando el conjunto no está vacío, toda cadena de firmante y de sello de tiempo se construye con un motor de confianza exclusivo que usa el conjunto para raíces de CA y certificados fijados explícitos sin consultar los almacenes Root o TrustedPeople de Windows

El motor exclusivo y el almacén de raíces analizado se almacenan en caché por el verificador y se reutilizan hasta que cambia el conjunto de anclas

Este aislamiento permite a una aplicación aplicar una política de confianza empresarial privada sin instalar certificados ni heredar confianza de máquina ajena

Pertenecer al conjunto de anclas de confianza no elude las comprobaciones de validez de certificado, uso de clave, firma ni revocación solicitada

ClearTrustAnchors libera el conjunto y restaura el motor de confianza del sistema de Windows por defecto para las comprobaciones posteriores

Sellos de tiempo RFC 3161

Verifier.SetTrustSource(TrustSource);
Source := Verifier.GetTrustSource;

SetTrustSource (índice de firma) y TPDFlibSignatureTrustSource (nombre de campo) validan una marca de tiempo de documento frente a los datos ByteRange de la firma

Las anclas del origen se combinan con las anclas personalizadas manuales en el mismo motor de cadena exclusivo, que se almacena en caché por revisión del origen y tiempo de verificación

Asignar un origen desactiva el recurso a las raíces del sistema de Windows cuando no hay origen ni ancla manual disponibles

Una evaluación del origen con éxito rellena TPDFlibSignatureChainReport.QualificationReport sin debilitar las comprobaciones de cadena de certificados, uso, validez, firma ni revocación

TPDFlibEUTSLTrustSource

Sellos de tiempo RFC 3161

VerifyDocumentTimeStamp y la familia VerifyDocumentTimeStampByName enumeran y validan los atributos

GetSignatureTimeStampCount y VerifySignatureTimeStamp validan primero la integridad de la firma y la cadena del firmante en la hora UTC solicitada Si la cadena a la hora solicitada no es válida, el verificador valida cada marca de tiempo de firma y cada marca de tiempo de documento cuya revisión firmada cubre la firma de destino, deduce la hora de firma confiable más temprana y la hora de archivado de todo el documento más tardía, y reintenta la cadena en esas horas de control de prueba de existencia Un id-aa-signatureTimeStampToken cero selecciona la hora UTC actual, mientras que un valor distinto de cero se pasa directamente a la directiva de cadena de certificados como UTC signatureValue permite que una marca de tiempo de firma confiable o una marca de tiempo de documento que la cubra suministre la hora de control histórica VerifySignatureTimeStamp y VerifySignatureTimeStampByName exigen una marca de tiempo de documento confiable que cubra el documento actual completo antes de que el material DSS, VRI, CRL u OCSP actual pueda tratarse como evidencia histórica; de lo contrario, el informe devuelve

Ex Una marca de tiempo suministra un límite superior de cuándo existieron los bytes firmados, no una hora de firma inferida, de modo que un certificado de firmante que ya no era válido en la hora de prueba seleccionada sigue sin ser válido VerifyDocumentTimeStampEx devuelve los informes de cadena solicitado y efectivo, las mejores horas de firma y de archivado, el origen de prueba seleccionado, los recuentos de marcas de tiempo, el estado de desplazamiento temporal y un estado histórico específico VerifyDocumentTimeStampExByName posprocesa uno de estos informes y rellena VerifySignatureTimeStampExVerifySignatureTimeStampExByName

TPDFlibTimeStampVerificationReport

Validación histórica AdES

Result := Verifier.VerifyAdESHistoricalByName(
  FieldName, 0, srmCacheOnly, ValidationTime, HistoricalReport);

VerifyAdESHistorical y VerifyAdESHistoricalByName validan primero la integridad de la firma y la cadena del firmante en la hora UTC solicitada

Si la cadena a la hora solicitada es inválida, el verificador valida cada sello de tiempo de firma y cada sello de tiempo de documento cuya revisión firmada cubre la firma objetivo, deduce la hora de firma confiable más temprana y la hora de archivo de todo el documento más tardía, y reintenta la cadena en esas horas de control de prueba de existencia

Un ValidationTime cero selecciona la hora UTC actual, mientras que un valor distinto de cero se pasa directamente a la política de cadena de certificados como UTC

srmNone

srmCacheOnly y srmOnline exigen un sello de tiempo de documento confiable que cubra el documento actual completo antes de que el material DSS, VRI, CRL u OCSP actual pueda tratarse como evidencia histórica; de lo contrario, el informe devuelve ahsEvidenceNotArchived

Un sello de tiempo suministra un límite superior de cuándo existieron los bytes firmados, no una hora de firma deducida, así que un certificado de firmante que ya era inválido en la hora de prueba seleccionada sigue siendo inválido

TPDFlibAdESHistoricalValidationReport devuelve informes de cadena solicitado y efectivo, las mejores horas de firma y de archivo, la fuente de prueba seleccionada, los recuentos de sellos de tiempo, el estado de deslizamiento temporal y un estado histórico específico

DeriveBaselineProfileBaselineProfile

ahsValidAtRequestedTimeLa integridad y la cadena son válidas sin desplazamiento temporal
ahsValidAtProofTimeLa cadena es válida en una hora de control deducida de una marca de tiempo confiable
ahsIntegrityInvalidLa firma o la marca de tiempo de documento seleccionada falla la validación de integridad o de ByteRange
ahsNoTrustedProofNinguna marca de tiempo confiable cubre la revisión de la firma seleccionada
ahsEvidenceNotArchivedSe solicitó la comprobación de revocación, pero ninguna marca de tiempo de archivado de todo el documento confiable sella el material de validación
ahsHistoricalTrustInvalidExisten horas de prueba confiables, pero la cadena del firmante no es válida en todas las horas de control deducidas

Métodos de compatibilidad

VerifySignatureGetSignatureMetadataGetSignerCertificateVerifySignerCertificateChain

ByIndex, ByName, GetSignatureMetadataByIndex y GetSignatureMetadataByName siguen disponibles y seleccionan el campo 0 y el firmante 0 Los métodos GetSignerCertificateByIndex y GetSignerCertificateByName correspondientes (

Véase también

TPDFlibEUTSLTrustSource, SetSignProcessDocMDP, SetSignProcessFieldLock, SetPAdESSignatureTimeStampToken