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
| IntegrityResult | Resultado de integridad criptográfica CMS o PKCS#7 clásico para el firmante seleccionado |
|---|---|
| CoverageStatus | scInvalid, scSignedRevision, or scWholeDocument |
| ByteRangeValid | True solo cuando todos los intervalos están acotados y la revisión firmada termina en su propio %%EOF |
| ContentsGapValid | True solo cuando los bytes omitidos son exactamente el token hexadecimal /Contents seleccionado |
| HasLaterRevisions | True 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 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
ahsValidAtRequestedTime | La integridad y la cadena son válidas sin desplazamiento temporal |
|---|---|
ahsValidAtProofTime | La cadena es válida en una hora de control deducida de una marca de tiempo confiable |
ahsIntegrityInvalid | La firma o la marca de tiempo de documento seleccionada 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 de todo el documento confiable sella el material de validación |
ahsHistoricalTrustInvalid | Existen 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