Trabajar con firmas digitales

Una firma digital es una implementación tecnológica de la firma electrónica para firmar documentos y autenticar al firmante para garantizar que un documento no ha sido modificado desde que fue firmado. Cada firma digital es única para cada firmante debido a que se sigue el protocolo PKI para generar claves tanto públicas como privadas. Firmar un documento digitalmente significa crear una firma utilizando la clave privada del firmante donde se utiliza un algoritmo matemático para cifrar el hash generado.

Aspose.Words le permite detectar, contar o verificar firmas digitales existentes y también agregar una nueva firma a su documento para descubrir cualquier manipulación en el mismo. También puede eliminar todas las firmas digitales de un documento. Utilice la clase DigitalSignatureUtil para trabajar con firmas digitales.

Este artículo explica cómo hacer todo lo anterior para validar la autenticidad e integridad de un documento digital.

Formatos admitidos

Aspose.Words le permite trabajar con firmas digitales en documentos DOC, OOXML y ODT y firmar el documento generado en formato PDF o XPS.

Limitaciones de las firmas digitales

La siguiente tabla describe algunas limitaciones que puede enfrentar al trabajar con firmas digitales a través de Aspose.Words, así como algunas opciones alternativas.

Limitación Opción alternativa
Pérdida de firmas digitales en un documento después de cargarlo y guardarlo. Por lo tanto, procesar un documento en un servidor puede provocar la pérdida de todas las firmas digitales sin previo aviso. Compruebe si un documento tiene firmas digitales y tome las medidas adecuadas si encuentra alguna. Por ejemplo, enviar una alerta a los clientes informándoles que el documento que están subiendo contiene firmas digitales que se perderán si se procesa.
Aspose.Words admite trabajar con macros en un documento. Pero Aspose.Words aún no admite firmas digitales en macros. Exporte el documento nuevamente a cualquier formato de Word y use Microsoft Word para agregar una firma digital a las macros.

Detectar, contar y verificar firmas digitales

Aspose.Words le permite detectar la firma digital en un documento utilizando el método DetectFileFormat y la propiedad HasDigitalSignature. Vale la pena señalar que dicha verificación sólo detectará el hecho de la firma, pero no su validez.

Un documento se puede firmar más de una vez y esto lo pueden hacer diferentes usuarios. Para comprobar la validez de las firmas digitales, debe cargarlas desde el documento utilizando el método LoadSignatures y utilizar la propiedad IsValid. Además, Aspose.Words le permite contar un conjunto de todas las firmas digitales dentro de un documento utilizando la propiedad Count.

Todo esto proporciona una manera eficiente y segura de verificar las firmas de un documento antes de procesarlo.

El siguiente ejemplo de código muestra cómo detectar la presencia de firmas digitales y verificarlas:

Crear una firma digital

Para crear una firma digital, deberá cargar un certificado de firma que confirme la identidad. Cuando envías un documento firmado digitalmente, también envías tu certificado y clave pública.

Aspose.Words le permite crear un certificado X.509, un certificado digital que utiliza el estándar PKI X.509 aceptado internacionalmente para verificar que una clave pública pertenece al firmante incluido dentro del certificado. Para hacer esto, use el método Create dentro de la clase CertificateHolder.

Las siguientes secciones explican cómo agregar una firma digital, una línea de firma y cómo firmar un documento PDF generado.

Firmar un documento

Aspose.Words le permite firmar digitalmente un documento DOC, DOCX, XPS u ODT utilizando el método Sign y las propiedades SignOptions.

El siguiente ejemplo de código muestra cómo firmar documentos utilizando un titular de certificado y opciones de firma:

Agregar una línea de firma

Una línea de firma es una representación visual de una firma digital en un documento. Aspose.Words le permite insertar una línea de firma utilizando el método DocumentBuilder.InsertSignatureLine. También puede configurar los parámetros para esta representación utilizando la clase SignatureLineOptions.

Por ejemplo, la siguiente imagen muestra cómo se pueden mostrar las firmas válidas e inválidas.

dibujo dibujo

Además, si un documento contiene una línea de firma y no una firma digital, existe una función que le pide al usuario que agregue una firma.

El siguiente ejemplo de código muestra cómo firmar un documento con un certificado personal y una línea de firma específica:

Firmar un documento PDF generado

Aspose.Words le permite firmar y obtener todos los detalles de un documento PDF utilizando las propiedades PdfDigitalSignatureDetails.

El siguiente ejemplo de código muestra cómo firmar un PDF generado:

Recuperar el valor de la firma digital

Aspose.Words también brinda la capacidad de recuperar el valor de la firma digital de un documento firmado digitalmente como una matriz de bytes utilizando la propiedad SignatureValue.

El siguiente ejemplo de código muestra cómo obtener el valor de la firma digital como una matriz de bytes de un documento:

Eliminar firmas digitales

Aspose.Words le permite eliminar todas las firmas digitales de un documento firmado utilizando el método RemoveAllSignatures.

El siguiente ejemplo de código muestra cómo cargar y eliminar firmas digitales de un documento: