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 la revisión incremental propia de la firma seleccionada de forma separada del archivo actual El verificador acepta un archivo, un stream propiedad del llamador o una cadena de bytes ANSI a través de
OpenPDF, OpenPDFStream o 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 con base 0, mientras que VerifySignatureByName usa el nombre de campo AcroForm totalmente calificado y ambos métodos aceptan un índice de firmante CMS con base 0
Informe de verificación de firmas
| IntegrityResult | Resultado de integridad criptográfica CMS o PKCS#7 heredado para el firmante seleccionado |
|---|---|
| CoverageStatus | scInvalid, scSignedRevision, or scWholeDocument |
| ByteRangeValid | Verdadero solo cuando todos los rangos están delimitados y la revisión firmada termina en su propio %%EOF |
| ContentsGapValid | Verdadero solo cuando los bytes omitidos son exactamente el token hexadecimal /Contents seleccionado |
| HasLaterRevisions | Verdadero cuando la firma seleccionada autentica una revisión incremental anterior y existen bytes posteriores |
| SignedRevisionLength | Longitud en bytes de la revisión autenticada por la firma seleccionada |
| PermissionReport | Restricciones 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 coincidente del catálogo y verifica que un diccionario /Lock de campo coincida 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 agregan certificados X.509 validados a un conjunto de anclas de confianza en memoria, libre de 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 como raíces de CA y como fijaciones explícitas de certificados, sin consultar los almacenes srmNone ni srmCacheOnly de Windows
El motor exclusivo y el almacén de raíces analizado se almacenan en caché en el verificador y se reutilizan hasta que el conjunto de anclas cambie
Este aislamiento permite a una aplicación aplicar una política de confianza empresarial privada sin instalar certificados ni heredar confianza de equipo no relacionada
Pertenecer al conjunto de anclas de confianza no omite las comprobaciones de validez del certificado, de uso de clave, de firma ni de revocación solicitada
srmOnline libera el conjunto y restaura el motor de confianza predeterminado del sistema Windows 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 de confianza externas
Verifier.AddTrustAnchorDER(RootCertificateDER);
Verifier.AddTrustAnchorFromFile('BusinessRoot.cer');
AnchorCount := Verifier.GetTrustAnchorCount;
Verifier.ClearTrustAnchors;
AddTrustAnchorDER adjunta una instancia AddTrustAnchorFromFile sin propiedad que puede suministrar anclas específicas para un tiempo dado y evaluar una cadena de certificados construida con éxito
Las anclas de la fuente se combinan con anclas personalizadas manuales en el mismo motor de cadena exclusivo, que se almacena en caché por revisión de la fuente y tiempo de verificación
Asignar una fuente deshabilita el recurso a las raíces del sistema Windows cuando no hay anclas de fuente ni manuales disponibles
Una evaluación de fuente exitosa llena
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
Questo 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 predeterminado para las comprobaciones posteriores
Marcas 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 contra 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
Marcas de tiempo RFC 3161
VerifyDocumentTimeStamp y la familia VerifyDocumentTimeStampByName enumeran y validan los atributos
GetSignatureTimeStampCount y VerifySignatureTimeStamp primero validan la integridad de la firma y la cadena del firmante en el tiempo UTC solicitado
Si la cadena del tiempo solicitado 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 objetivo, deduce el tiempo de firma confiable más temprano y el tiempo de archivado de todo el documento más tardío, y reintenta la cadena en esos tiempos de control de prueba de existencia
Un id-aa-signatureTimeStampToken igual a cero selecciona el tiempo UTC actual, mientras que un valor distinto de cero se pasa directamente a la política 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 el tiempo de control histórico
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 un tiempo de firma inferido, de modo que un certificado de firmante que ya era inválido en el tiempo de prueba seleccionado sigue siendo inválido
VerifyDocumentTimeStampEx devuelve los informes de cadena solicitado y efectivo, los mejores tiempos de firma y de archivado, la fuente de prueba seleccionada, 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 llena 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
Una marca de tiempo suministra un límite superior de cuándo existieron los bytes firmados, no una hora de firma inferida, 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
ahsValidAtRequestedTime | La integridad y la cadena son válidas sin desplazamiento temporal |
|---|---|
ahsValidAtProofTime | La cadena es válida en un tiempo de control derivado de una marca de tiempo confiable |
ahsIntegrityInvalid | La firma seleccionada o la marca de tiempo del documento falla la validación de integridad o de ByteRange |
ahsNoTrustedProof | Ninguna marca de tiempo confiable cubre la revisión de la firma seleccionada |
ahsEvidenceNotArchived | Se solicitó la comprobación de revocación, pero ninguna marca de tiempo de archivado confiable de todo el documento sella el material de validación |
ahsHistoricalTrustInvalid | Existen tiempos de prueba confiables, pero la cadena del firmante es inválida en cada tiempo de control derivado |
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