Добавить цифровые подписи к презентациям в PHP

Цифровой сертификат используется для создания защищённой паролем презентации PowerPoint, отмеченной как созданная определённой организацией или лицом. Цифровой сертификат можно получить, обратившись в уполномоченную организацию — центр сертификации. После установки цифрового сертификата в систему его можно использовать для добавления цифровой подписи к презентации через Файл -> Информация -> Защитить презентацию:

todo:image_alt_text

Презентация может содержать более одной цифровой подписи. После того как цифровая подпись добавлена к презентации, в PowerPoint появляется специальное сообщение:

todo:image_alt_text

Чтобы подписать презентацию или проверить подлинность подписей презентации, Aspose.Slides API предоставляет класс DigitalSignature, класс DigitalSignatureCollection и метод Presentation::getDigitalSignatures. В настоящее время цифровые подписи поддерживаются только для формата PPTX.

Добавить цифровую подпись из PFX‑сертификата

Ниже приведён пример кода, демонстрирующий, как добавить цифровую подпись из PFX‑сертификата:

  1. Откройте файл PFX и передайте пароль PFX объекту DigitalSignature.
  2. Добавьте созданную подпись к объекту презентации.
  # Открытие файла презентации
  $pres = new Presentation();
  try {
    # Создать объект DigitalSignature с файлом PFX и паролем PFX
    $signature = new DigitalSignature("testsignature1.pfx", "testpass1");
    # Комментарий новой цифровой подписи
    $signature->setComments("Aspose.Slides digital signing test.");
    # Добавить цифровую подпись к презентации
    $pres->getDigitalSignatures()->add($signature);
    # Сохранить презентацию
    $pres->save("SomePresentationSigned.pptx", SaveFormat::Pptx);
  } finally {
    $pres->dispose();
  }

Теперь можно проверить, была ли презентация подписана цифровой подписью и не была изменена:

  # Открыть презентацию
  $pres = new Presentation("SomePresentationSigned.pptx");
  try {
    if (java_values($pres->getDigitalSignatures()->size()) > 0) {
      $allSignaturesAreValid = true;
      echo("Signatures used to sign the presentation: ");
      # Check if all digital signatures are valid
      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();
    }
  }

FAQ

Могу ли я удалить существующие подписи из файла?

Да. Коллекция цифровых подписей поддерживает удаление отдельных элементов и полную очистку; после сохранения файла в презентации не будет подписей.

Файл становится «только для чтения» после подписи?

Нет. Подпись сохраняет целостность и авторство, но не блокирует правки. Чтобы ограничить редактирование, комбинируйте её с “Только для чтения” или паролем.

Будет ли подпись отображаться правильно в разных версиях PowerPoint?

Подпись создаётся для контейнера OOXML (PPTX). Современные версии PowerPoint, поддерживающие подписи OOXML, корректно отображают статус таких подписей.