Электронные подписи
Цифровые подписи
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 |
DigitalSignatureType | Enum: CryptoApi, XmlDsig, Unknown |
CertificateHolder | Оборачивает подпись X509Certificate2 |