Электронные подписи

Цифровые подписи

Aspose.Words FOSS для .NET может проверять и верифицировать цифровые подписи, которые уже прикреплены к .docx документу через Aspose.Words.DigitalSignatures пространство имён. Эта версия охватывает подпись verification — чтение метаданных подписи, проверка её действительности и изучение сертификата подписи. Возможность создавать новые подписи в документе не включена.


Чтение подписей из документа

Каждый Document предоставляет свойство DigitalSignatures, возвращающее DigitalSignatureCollection — коллекцию только для чтения, перечисляемую, содержащую объекты DigitalSignature, уже присутствующие в загруженном файле. DigitalSignatureUtil.LoadSignatures(fileName) (и перегрузка LoadSignatures(stream)) считывает подписи напрямую из файла или потока без полной загрузки документа в объект Document, что полезно, когда нужно лишь проверить статус подписи. Свойство IsValid коллекции сообщает, действительна ли каждая подпись в ней, а Count указывает, сколько подписей найдено.


Проверка отдельной подписи

Каждый DigitalSignature предоставляет IsValid (указывает, криптографически действительна ли подпись), SignatureType (значение DigitalSignatureType — CryptoApi, XmlDsig или Unknown), SignTime, Comments, SubjectName, IssuerName и необработанные байты SignatureValue. Свойство CertificateHolder возвращает объект CertificateHolder, оборачивающий сертификат подписи; его свойство Certificate раскрывает базовый X509Certificate2, чтобы вы могли изучать стандартные поля сертификата (издатель, субъект, период действия) с помощью собственных API сертификатов .NET.


Что не поддерживается в этой версии

Поверхность API по-прежнему объявляет члены, связанные с подписью — DigitalSignatureUtil.Sign(), SignOptions, и XmlDsigLevel — для структурной совместимости с коммерческой Aspose.Words для .NET моделью объектов, но создание новой цифровой подписи в документе в этой FOSS-версии не работает. Используйте эту версию для verify подписей, уже существующих в документе; для рабочего процесса подписи требуется Aspose.Words для .NET.


Советы и лучшие практики

  • Отдавайте предпочтение DigitalSignatureUtil.LoadSignatures() вместо полного открытия Document, когда вам нужно только проверить, подписан ли файл — это избавляет от необходимости разбирать всё тело документа.
  • Сначала проверьте DigitalSignatureCollection.IsValid для быстрой проверки pass/fail, прежде чем перебирать отдельные значения DigitalSignature.IsValid.
  • SignatureType сообщает, какой механизм подписания создал подпись (CryptoApi против XmlDsig); это влияет на то, какие поля сертификата имеют значение.
  • Рассматривайте IsValid == false как условие жёсткого сбоя в любой автоматизированной системе приёма документов — не представляйте метаданные подписи из недействительной подписи как надёжные.

Распространённые проблемы

ПроблемаПричинаИсправление
DigitalSignatures.Count равно 0 в подписанном .docxФайл был пересохранён инструментом, который удалил часть подписиПроверьте оригинальный подписанный файл, а не пересохранённую копию
Подпись сообщает IsValid = falseСодержимое документа изменилось после подписи, или сертификат недоверенный/истёкСчитать недействительным; не пытаться «исправлять» подпись
Попытка подписать документ не имеет эффектаПодпись не реализована в этом FOSS-изданииИспользуйте Aspose.Words для .NET (commercial) в рабочих процессах подписи
CertificateHolder.Certificate бросает исключение при проверкеИсходные данные сертификата искажены или часть подписи поврежденаУбедитесь, что исходный файл является подлинным, неизменённым подписанным документом

FAQ

Может ли Aspose.Words FOSS для .NET подписать документ?

Нет. Эта версия может проверять существующие цифровые подписи, но не может создавать новые. Метод DigitalSignatureUtil.Sign() и класс SignOptions присутствуют в интерфейсе API для структурной совместимости, однако подпись здесь не функционирует.

Как проверить, подписан ли документ, не загружая его полностью?

Вызовите DigitalSignatureUtil.LoadSignatures(fileName), который возвращает DigitalSignatureCollection непосредственно из файла.

Что означает DigitalSignatureCollection.IsValid?

Это true только тогда, когда каждая подпись в наборе индивидуально действительна — быстрый способ проверить общую целостность подписей документа перед проверкой каждой DigitalSignature.

Где я могу получить детали сертификата для подписи?

Через DigitalSignature.CertificateHolder.Certificate, который возвращает стандартный .NET X509Certificate2.


API Reference Сводка

Класс / МетодОписание:
Document.DigitalSignaturesПодписи, уже прикреплённые к загруженному документу
DigitalSignatureUtil.LoadSignatures()Считать подписи из файла или потока без загрузки полного документа
DigitalSignatureCollectionКоллекция только для чтения объектов DigitalSignature; IsValid, Count
DigitalSignatureОдна подпись: IsValid, SignTime, SubjectName, IssuerName, CertificateHolder
DigitalSignatureTypeEnum: CryptoApi, XmlDsig, Unknown
CertificateHolderОборачивает подпись X509Certificate2

См. также:

 Русский