Добавление цифровых подписей к презентациям в Python
Обзор
Электронная подпись помогает получателю определить, кто подписал презентацию и изменилось ли подписанное содержимое. Здесь важны три связанных понятия безопасности:
- Цифровой сертификат — это электронные учетные данные, связывающие идентичность с открытым ключом. Доверенный центр сертификации (CA) может выдать сертификат, или организация может использовать самоподписанный сертификат для внутренних рабочих процессов.
- Цифровая подпись создаётся из содержимого презентации и закрытого ключа владельца сертификата. Открытый ключ сертификата затем используется для проверки подписи. Подпись предоставляет доказательство происхождения и целостности; она не шифрует презентацию.
- Защита паролем контролирует, может ли пользователь открыть или изменить презентацию. Это отдельный механизм от цифровой подписи и описан в статье Password-Protected Presentations.
PowerPoint предоставляет команду Добавить цифровую подпись в разделе Файл > Сведения > Защита презентации.

После открытия подписанной презентации PowerPoint может отображать уведомление о статусе подписи.

Aspose.Slides предоставляет подписи через Presentation.digital_signatures, DigitalSignatureCollection со элементами типа DigitalSignature. Презентация может содержать несколько подписей.
Понимание сертификатов PFX и паролей
Файл PFX, также известный как файл PKCS#12 и обычно имеющий расширение .pfx или .p12, может содержать сертификат X.509, его закрытый ключ и цепочку сертификатов. Закрытый ключ позволяет владельцу создавать подпись. Сертификат без доступного закрытого ключа нельзя использовать для подписи презентации.
Пароль PFX защищает пакет сертификата и закрытый ключ. Это не пароль для открытия или редактирования презентации. Не помещайте файлы PFX и их пароли в систему контроля версий. В производстве ограничьте доступ к файлу сертификата и получайте его пароль из хранилища секретов или другого защищённого конфигурационного источника. Примеры ниже используют переменную окружения только для того, чтобы не встраивать пароль в код.
Добавление цифровой подписи к презентации
Чтобы подписать презентацию в реальном рабочем процессе, загрузите существующий файл PPTX, создайте DigitalSignature из сертификата PFX и его пароля, добавьте подпись в коллекцию презентации и сохраните в файл PPTX.
import os
import aspose.slides as slides
certificate_password = os.environ.get("PFX_PASSWORD")
if certificate_password is None:
raise RuntimeError("Set the PFX_PASSWORD environment variable.")
with slides.Presentation("InputPresentation.pptx") as presentation:
signature = slides.DigitalSignature("signing-certificate.pfx", certificate_password)
signature.comments = "Approved for release."
presentation.digital_signatures.add(signature)
presentation.save("InputPresentation-signed.pptx", slides.export.SaveFormat.PPTX)
Сохранение результата под новым именем сохраняет исходный файл без подписи. Значение DigitalSignature.comments описывает цель подписи; это не средство защиты.
Проверка цифровых подписей
При загрузке подписанного файла PPTX просмотрите каждый элемент в Presentation.digital_signatures. Свойство DigitalSignature.is_valid указывает, является ли встроенная подпись действительной для текущего содержимого презентации.
import hashlib
import aspose.slides as slides
with slides.Presentation("InputPresentation-signed.pptx") as presentation:
signature_count = len(presentation.digital_signatures)
if signature_count == 0:
print("The presentation does not contain digital signatures.")
else:
all_signatures_are_valid = True
for signature in presentation.digital_signatures:
signature_status = "VALID" if signature.is_valid else "INVALID"
certificate_fingerprint = hashlib.sha256(signature.certificate).hexdigest().upper()
signing_time = signature.sign_time.strftime("%Y-%m-%d %H:%M:%S")
print(
f"Certificate SHA-256: {certificate_fingerprint}, "
f"{signing_time} -- {signature_status}"
)
all_signatures_are_valid = (all_signatures_are_valid and signature.is_valid)
if all_signatures_are_valid:
print("All embedded signatures are valid for the current presentation.")
else:
print("At least one embedded signature is invalid.")
Невалидный результат обычно означает, что содержимое подписанной презентации или данные подписи изменились после подписания, либо файл повреждён. Удаление всех подписей приводит к презентации без подписей, поэтому проверка только валидности элементов недостаточна: в рабочем процессе, чувствительном к безопасности, также необходимо убедиться, что присутствует ожидаемое количество подписей и ожидаемые идентификаторы подписантов.
Свойство DigitalSignature.certificate предоставляет данные сертификата в виде массива байтов. В примере вычисляется его отпечаток SHA‑256, чтобы приложение могло сравнить его с отпечатком ожидаемого сертификата подписанта.
Этот результат проверки не следует рассматривать как окончательное решение о доверии к сертификату. В зависимости от вашей политики безопасности приложение также может потребовать построения и проверки цепочки сертификатов X.509, проверки дат действия и статуса отзыва, подтверждения ожидаемого субъекта или отпечатка, проверки назначения ключа и оценки доверенного временного штампа. Значение DigitalSignature.sign_time само по себе не является доказательством от доверенного сервиса временных меток.
Удаление цифровых подписей
Удаление подписей изменяет состояние безопасности презентации. В следующем примере загружается подписанный файл PPTX, удаляются все подписи с помощью DigitalSignatureCollection.clear, и сохраняется копия без подписи.
import aspose.slides as slides
with slides.Presentation("InputPresentation-signed.pptx") as presentation:
presentation.digital_signatures.clear()
presentation.save("InputPresentation-unsigned.pptx", slides.export.SaveFormat.PPTX)
Чтобы удалить только одну подпись, вызовите DigitalSignatureCollection.remove_at с её нулевым индексом. Сохраните в новый файл, если перезапись оригинального подписанного файла не является явной частью вашего процесса.
Редактирование и вопросы формата
- Подпись не делает презентацию только для чтения. Пользователи и приложения могут продолжать редактировать файл, но изменения подписанного содержимого обычно делают существующую подпись недействительной.
- Выполните все запланированные правки до подписания. Если необходимо изменить презентацию, сохраните её обновлённую версию и подпишите её снова.
- Сохраняйте окончательный результат в формате PPTX. Преобразование подписанной презентации в другой формат не переносит оригинальную подпись PPTX как действительную подпись для преобразованного файла.
- Рассматривайте закрытый ключ сертификата как конфиденциальный. Любой, кто получит закрытый ключ и его пароль, сможет создавать подписи, которые будут выглядеть как подписи владельца сертификата.
- Сохраняйте исходный файл без подписи или другую контролируемую копию, если это требует ваша политика хранения документов.
FAQ
Шифрует ли цифровая подпись презентацию?
Нет. Цифровая подпись предоставляет доказательства происхождения и целостности, но содержимое презентации остаётся доступным для чтения, если не применяется отдельное шифрование. Используйте защиту паролем, когда необходимо ограничить доступ к содержимому.
Совпадает ли пароль PFX с паролем презентации?
Нет. Пароль PFX разблокирует закрытый ключ, хранящийся в пакете сертификата. Он не управляет тем, кто может открыть или отредактировать файл PPTX.
Можно ли использовать самоподписанный сертификат?
Технически самоподписанный сертификат можно использовать, если в нём доступен закрытый ключ. Получатели автоматически не будут ему доверять, если только сертификат явно не добавлен в их доверенную среду. Во внешних или кросс‑организационных рабочих процессах обычно используют сертификат, выданный доверенным CA.
Что делает подпись недействительной?
Изменение подписанного содержимого презентации или данных подписи после подписания делает подпись недействительной. Повреждение файла также может привести к ошибке проверки. Если все подписи удалены, презентация просто остаётся без подписи, а не содержит недействительную подпись.
Означает ли действительная подпись, что ей можно доверять?
Не сама по себе. Целостность подписи и доверие к подписанту — это отдельные решения. Политика проверки в продакшене должна также проверять цепочку сертификатов, сроки действия, статус отзыва, ожидаемую личность, назначение ключа и любые требования к доверенному временному штампу.
Что происходит, когда сертификат истекает?
Истечение срока действия сертификата не меняет байты презентации, но влияет на оценку доверия к сертификату. Приёмлемость подписи зависит от вашей политики и от того, есть ли действительный доверенный временной штамп, подтверждающий, что подпись была сделана, пока сертификат был действителен. Не полагайтесь только на отображаемое время подписи как на доверенный временной штамп.
Можно ли редактировать подписанную презентацию?
Да. Подпись не блокирует файл. Редактирование подписанного содержимого, как правило, делает существующую подпись недействительной, поэтому завершайте презентацию и подпишите окончательную версию.
Может ли презентация содержать более одной подписи?
Да. Добавляйте каждую подпись в Presentation.digital_signatures перед сохранением. При проверке просматривайте каждую подпись и убеждайтесь, что присутствуют все необходимые подписанты.
Какие форматы презентаций поддерживают эти операции?
Aspose.Slides поддерживает описанные операции с цифровой подписью только для формата PPTX. Форматы PPT и OpenDocument не поддерживаются этим API‑рабочим процессом.
Можно ли удалить подпись, не затронув слайды?
Да. Вы можете удалить одну подпись или очистить всю коллекцию, а затем сохранить презентацию. Содержание слайдов остаётся доступным, но сохранённый файл уже не содержит доказательств удалённой подписи.