Añadir firmas digitales a presentaciones en PHP

certificado digital se utiliza para crear una presentación de PowerPoint protegida con contraseña, marcada como creada por una organización o persona concreta. El certificado digital puede obtenerse contactando a una organización autorizada – una autoridad certificadora. Tras instalar el certificado digital en el sistema, puede usarse para añadir 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 añada 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 clase DigitalSignature, la clase DigitalSignatureCollection y el método Presentation::getDigitalSignatures. Actualmente, las firmas digitales solo son compatibles con el formato PPTX.

Añadir una firma digital a partir de un certificado PFX

El siguiente ejemplo de código muestra cómo añadir una firma digital a partir de un certificado PFX:

  1. Abra el archivo PFX y pase la contraseña del PFX al objeto DigitalSignature.
  2. Añada la firma creada al objeto de la presentación.
  # Abrir el archivo de la presentación
  $pres = new Presentation();
  try {
    # Crear objeto DigitalSignature con el archivo PFX y la contraseña PFX
    $signature = new DigitalSignature("testsignature1.pfx", "testpass1");
    # Comentario de la nueva firma digital
    $signature->setComments("Aspose.Slides digital signing test.");
    # Añadir firma digital a la presentación
    $pres->getDigitalSignatures()->add($signature);
    # Guardar la presentación
    $pres->save("SomePresentationSigned.pptx", SaveFormat::Pptx);
  } finally {
    $pres->dispose();
  }

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

  # Abrir presentación
  $pres = new Presentation("SomePresentationSigned.pptx");
  try {
    if (java_values($pres->getDigitalSignatures()->size()) > 0) {
      $allSignaturesAreValid = true;
      echo("Signatures used to sign the presentation: ");
      # Comprobar si todas las firmas digitales son válidas
      foreach($pres->getDigitalSignatures() as $signature) {
        echo($signature->getComments() . ", " . $signature->getSignTime()->toString() . " -- " . $signature->isValid() ? "VALID" : "INVALID");
        $allSignaturesAreValid &= $signature->isValid();
      }
      if ($allSignaturesAreValid) {
        echo("Presentation is genuine, all signatures are valid.");
      } else {
        echo("Presentation has been modified since signing.");
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Preguntas frecuentes

¿Puedo eliminar firmas existentes de un archivo?

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

¿El archivo pasa a ser “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.

¿Se mostrará correctamente la firma en distintas 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.