Работа с цифровыми подписями

Цифровая подпись используется для аутентификации документа, чтобы установить, что отправитель документа является тем, кем он является, и содержание документа не было подделано.

Aspose.Words Поддерживает документы с цифровыми подписями и предоставляет доступ к ним, позволяя обнаруживать и проверять цифровые подписи на документе и подписывать сгенерированный документ PDF с предоставленным сертификатом. В настоящее время цифровые подписи поддерживаются на документах DOC, OOXML и ODT. Подписание сгенерированных документов поддерживается в формате PDF.

Цифровые подписи не хранятся в открытом и сохраненном виде

Важно отметить, что документ загружается, а затем сохраняется с помощью Aspose.Words Вы потеряете все цифровые подписи, подписанные на документе. Это по дизайну, поскольку цифровая подпись гарантирует, что контент не был изменен, и, кроме того, удостоверяет личность подписавшего документ. Эти принципы были бы признаны недействительными, если бы первоначальные подписи были перенесены на итоговый документ.

В связи с этим, если вы обрабатываете документы, загруженные на сервер, это может потенциально означать, что вы можете повредить документ, загруженный на ваш сервер таким образом, не зная об этом. Поэтому лучше всего проверить наличие цифровых подписей на документе и предпринять соответствующие действия, если они найдены, например, клиенту может быть отправлено предупреждение о том, что документ, который они передают, содержит цифровые подписи, которые будут потеряны, если он будет обработан. Вы можете скачать файл шаблона этого примера из здесь.

Приведенный выше код использует FileFormatUtil.detect_file_format Способ определения того, содержит ли документ цифровые подписи без предварительной загрузки документа. Это обеспечивает эффективный и безопасный способ проверки документа на наличие подписей перед их обработкой. При выполнении способ возвращает a FileFormatInfo Объект, который предоставляет собственность FileFormatInfo.has_digital_signature. Это свойство возвращает true документ содержит одну или несколько цифровых подписей. Важно отметить, что этот метод не проверяет подлинность подписей, он только определяет, присутствуют ли подписи. Проверка цифровых подписей рассматривается в следующем разделе.

Цифровые подписи на Macros (VBA Projects)

Цифровые подписи на макросах не могут быть доступны или подписаны. Это потому, что Aspose.Words Не имеет прямого отношения к макросам в документе. Однако цифровые подписи на макросах сохраняются при экспорте документа обратно в любой формат слов. Эти подписи могут сохраняться на коде VBA, поскольку двоичное содержимое макросов не изменяется, даже если изменяется сам документ.

Доступ и проверка цифровых подписей

Документ может иметь несколько цифровых подписей. Все эти подписи можно получить через Document.digital_signatures Коллекция. Каждый возвращенный объект является DigitalSignature представляет собой единую цифровую подпись, принадлежащую документу. Это дает участникам возможность проверить действительность подписи.

Наиболее важным свойством для проверки с помощью цифровых подписей является действительность каждой подписи в документе. Все подписи в документе могут быть подтверждены сразу, позвонив по адресу: DigitalSignatureCollection.is_valid собственность. Это вернется true если все подписи в документе действительны или если документ не имеет подписей и false Если хотя бы одна цифровая подпись недействительна.

Каждая подпись также может быть индивидуально подтверждена путем вызова. DigitalSignature.is_valid. Подпись может быть возвращена недействительной по нескольким причинам, например, документ был изменен с момента подписания или срок действия сертификата истек. Также можно получить дополнительную информацию о подписи. Образец кода ниже показывает, как проверить каждую подпись в документе и отображать основную информацию о подписи. Вы можете скачать файл шаблона этого примера из здесь.

Подписание документов Word

DigitalSignatureUtil Класс предоставляет способы подписания документа. DigitalSignatureUtil.sign метод вывески исходного документа с использованием данного CertificateHolder с цифровой подписью и записывает подписанный документ в поток назначения

Ниже приведен пример, как подписать простой документ

Ниже приведен пример, как подписать зашифрованный документ

Подписание документа Word с помощью строки подписи

Вы можете подписать исходный документ, используя CertificateHolder и SignOptions с цифровой подписью и записывает подписанный документ в файл назначения. использовать SignOptions В классе можно указать варианты подписания документов. Ниже пример показывает, как создать новую линию подписи и подписать документ

Ниже приведен пример, как изменить существующую линию подписи и подписать документ

Подписание документа Word с помощью идентификатора поставщика подписи

Ниже пример показывает, как подписать документ Word с помощью идентификатора поставщика подписи. Поставщик криптографических услуг (CSP) является независимым программным модулем, который фактически выполняет криптографические алгоритмы для аутентификации, кодирования и шифрования. MS Office сохраняет значение {00000000-0000-0000-0000-000000000} для своего поставщика подписей по умолчанию.

Создайте новую подпись Line Sign Word Document с помощью идентификатора провайдера

Ниже приведен пример, как создать линию подписи и знак Документ Word с использованием идентификатора поставщика подписи.

Восстановление ценности цифровой подписи

Aspose.Words также обеспечивает возможность извлечения значения цифровой подписи из документа с цифровой подписью в виде байтового массива с использованием SignatureValue собственность.

Следующий пример кода показывает, как получить значение цифровой подписи в виде байтового массива из документа:

doc = aw.Document(MY_DIR + "Digitally signed.docx")

for digital_signature in doc.digital_signatures:
    signature_value = base64.b64encode(digital_signature.signature_value)
    print(f"Base64 signature value is: {signature_value}")