Agregar firmas digitales a presentaciones con Python

Certificado digital se utiliza para crear una presentación de PowerPoint protegida con contraseña, marcada como creada por una organización o persona específica. El certificado digital puede obtenerse contactando a una organización autorizada, una autoridad certificadora. Después de instalar el certificado digital en el sistema, se puede usar para agregar una firma digital a la presentación mediante Archivo -> Información -> Proteger presentación:

todo:image_alt_text

La presentación puede contener más de una firma digital. Después de que se agregue la firma digital a la presentación, aparecerá un mensaje especial en PowerPoint:

todo:image_alt_text

Para firmar la presentación o comprobar la autenticidad de las firmas de la presentación, Aspose.Slides API proporciona la interfaz IDigitalSignature, la interfaz IDigitalSignatureCollection y la propiedad IPresentation.DigitalSignatures. Actualmente, las firmas digitales son compatibles solo con el formato PPTX.

Agregar firma digital desde un certificado PFX

El siguiente ejemplo de código muestra cómo agregar una firma digital desde un certificado PFX:

  1. Abra el archivo PFX y pase la contraseña del PFX al objeto DigitalSignature.
  2. Agregue la firma creada al objeto de presentación.

#[TODO:Exception] RuntimeError: Error de proxy (FileNotFoundException): No se pudo cargar el archivo o ensamblado 'System.Security.Cryptography.Xml, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. El archivo no fue encontrado.

import aspose.slides as slides

with slides.Presentation() as pres:
    # Crear objeto DigitalSignature con archivo PFX y contraseña PFX 
    signature = slides.DigitalSignature(path + "testsignature1.pfx", "testpass1")

    # Comentario de la nueva firma digital
    signature.comments = "Aspose.Slides digital signing test."

    # Agregar firma digital a la presentación
    pres.digital_signatures.add(signature)

    # guardar presentación
    pres.save("SomePresentationSigned.pptx", slides.export.SaveFormat.PPTX)

Ahora es posible comprobar si la presentación fue firmada digitalmente y no ha sido modificada:

# Abrir presentación
with slides.Presentation("SomePresentationSigned.pptx") as pres:
    if len(pres.digital_signatures) > 0:
        allSignaturesAreValid = True

        print("Signatures used to sign the presentation: ")
        # Verificar si todas las firmas digitales son válidas
        for signature in pres.digital_signatures :
            print(signature.certificate.subject_name.name + ", "
                    + signature.sign_time.strftime("yyyy-MM-dd HH:mm") + " -- " + "VALID" if signature.is_valid else "INVALID")
            allSignaturesAreValid = allSignaturesAreValid and signature.is_valid
        

        if allSignaturesAreValid:
            print("Presentation is genuine, all signatures are valid.")
        else:
            print("Presentation has been modified since signing.")

FAQ

¿Puedo eliminar las firmas existentes de un archivo?

Sí. La colección de firmas digitales admite eliminar elementos individuales y borrarla por completo; después de guardar el archivo, la presentación no tendrá firmas.

¿El archivo queda “solo lectura” después de firmarlo?

No. Una firma preserva la integridad y la autoría, pero no impide las ediciones. Para restringir la edición, combínela con “Solo lectura” o una contraseña.

¿La firma se mostrará correctamente en diferentes versiones de PowerPoint?

La firma se crea para el contenedor OOXML (PPTX). Las versiones modernas de PowerPoint que admiten firmas OOXML muestran correctamente el estado de dichas firmas.