Adicionar Assinaturas Digitais a Apresentações em PHP

Introdução

Certificado digital é usado para criar uma apresentação do PowerPoint protegida por senha, marcada como criada por uma organização ou pessoa específica. O certificado digital pode ser obtido entrando em contato com uma organização autorizada – uma autoridade certificadora. Após instalar o certificado digital no sistema, ele pode ser usado para adicionar uma assinatura digital à apresentação via Arquivo->Info->Proteger apresentação:

todo:image_alt_text

A apresentação pode conter mais de uma assinatura digital. Após a assinatura digital ser adicionada à apresentação, uma mensagem especial aparecerá no PowerPoint:

todo:image_alt_text

Para assinar a apresentação ou verificar a autenticidade das assinaturas da apresentação, a Aspose.Slides API fornece a classe DigitalSignature, a classe DigitalSignatureCollection e o método Presentation::getDigitalSignatures. Atualmente, assinaturas digitais são suportadas somente para o formato PPTX.

Adicionar uma Assinatura Digital a partir de um Certificado PFX

O exemplo de código abaixo demonstra como adicionar uma assinatura digital a partir de um certificado PFX:

  1. Abra o arquivo PFX e passe a senha do PFX para o objeto DigitalSignature.
  2. Adicione a assinatura criada ao objeto da apresentação.
  # Abrindo o arquivo de apresentação
  $pres = new Presentation();
  try {
    # Criar objeto DigitalSignature com arquivo PFX e senha PFX
    $signature = new DigitalSignature("testsignature1.pfx", "testpass1");
    # Comentário nova assinatura digital
    $signature->setComments("Aspose.Slides digital signing test.");
    # Adicionar assinatura digital à apresentação
    $pres->getDigitalSignatures()->add($signature);
    # Salvar apresentação
    $pres->save("SomePresentationSigned.pptx", SaveFormat::Pptx);
  } finally {
    $pres->dispose();
  }

Agora é possível verificar se a apresentação foi assinada digitalmente e não foi modificada:

  # Abrir apresentação
  $pres = new Presentation("SomePresentationSigned.pptx");
  try {
    if (java_values($pres->getDigitalSignatures()->size()) > 0) {
      $allSignaturesAreValid = true;
      echo("Signatures used to sign the presentation: ");
      # Verificar se todas as assinaturas digitais são 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();
    }
  }

Perguntas Frequentes

Posso remover assinaturas existentes de um arquivo?

Sim. A coleção de assinaturas digitais suporta a remover itens individuais e limpar completamente; depois de salvar o arquivo, a apresentação não terá assinaturas.

O arquivo se torna “somente leitura” após a assinatura?

Não. Uma assinatura preserva a integridade e a autoria, mas não bloqueia edições. Para restringir a edição, combine‑a com “Somente leitura” ou uma senha.

A assinatura será exibida corretamente em diferentes versões do PowerPoint?

A assinatura é criada para o contêiner OOXML (PPTX). Versões modernas do PowerPoint que suportam assinaturas OOXML exibem o status dessas assinaturas corretamente.