Работа с цифровыми подписями
Цифровая подпись - это технологическая реализация электронных подписей для подписания документов и аутентификации подписавшего, чтобы гарантировать, что документ не был изменен с момента его подписания. Каждая цифровая подпись уникальна для каждого подписавшего из-за следования протоколу PKI для создания как открытых, так и закрытых ключей. Подписание документа в цифровом виде означает создание подписи с использованием закрытого ключа подписавшего, где математический алгоритм используется для шифрования генерируемого хеша.
Aspose.Words Позволяет обнаруживать, подсчитывать или проверять существующие цифровые подписи, а также добавлять новую подпись в документ, чтобы выяснить любое вмешательство в него. Вы также можете удалить все цифровые подписи из документа. Используйте DigitalSignatureUtil Класс для работы с цифровыми подписями.
В этой статье объясняется, как сделать все вышеперечисленное, чтобы подтвердить подлинность и целостность цифрового документа.
Попробуйте онлайн
Вы можете попробовать эту функцию с нашей Бесплатная онлайн подпись.
Поддерживаемые форматы
Aspose.Words позволяет работать с цифровыми подписями на документах DOC, OOXML и ODT и подписывать сгенерированный документ в формате PDF или XPS Формат.
Ограничения цифровых подписей
В таблице ниже описаны некоторые ограничения, с которыми вы можете столкнуться при работе с цифровыми подписями. Aspose.Words, А также некоторые альтернативные варианты.
ограничение | Альтернативный вариант |
---|---|
Потеря цифровых подписей на документе после загрузки и сохранения. Поэтому обработка документа на сервер может привести к потере всех цифровых подписей без уведомления | Проверьте, есть ли в документе цифровые подписи, и при обнаружении их примите соответствующие меры. Например, отправьте уведомление клиентам, сообщив им, что документ, который они загружают, содержит цифровые подписи, которые будут потеряны, если он будет обработан |
Aspose.Words Поддерживает работу с макросами в документе. Но Aspose.Words Пока не поддерживает цифровые подписи на макросах | Экспортировать документ в любой формат Word и использовать его. Microsoft Word Добавить цифровую подпись в макросы |
Обнаружение, подсчет и проверка цифровых подписей
Aspose.Words позволяет обнаружить цифровую подпись в документе, используя DetectFileFormat метод и его HasDigitalSignature собственность. Стоит отметить, что такая проверка позволит лишь выявить факт подписи, но не ее действительность.
Документ может быть подписан не один раз, и это могут сделать разные пользователи. Чтобы проверить действительность цифровых подписей, необходимо загрузить их из документа с помощью LoadSignatures Метод и использование IsValid собственность. Также Aspose.Words позволяет подсчитать набор всех цифровых подписей в документе, используя Count собственность.
Все это обеспечивает эффективный и безопасный способ проверки документа на подпись перед его обработкой.
Следующий пример кода показывает, как обнаружить наличие цифровых подписей и проверить их:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
FileFormatInfo info = FileFormatUtil.DetectFileFormat(MyDir + "Digitally signed.docx"); | |
if (info.HasDigitalSignature) | |
{ | |
Console.WriteLine( | |
$"Document {Path.GetFileName(MyDir + "Digitally signed.docx")} has digital signatures, " + | |
"they will be lost if you open/save this document with Aspose.Words."); | |
} |
Создайте цифровую подпись
Чтобы создать цифровую подпись, вам потребуется загрузить сертификат подписи, который подтверждает личность. Когда вы отправляете документ с цифровой подписью, вы также отправляете сертификат и открытый ключ.
Aspose.Words Это позволяет создать сертификат X.509, цифровой сертификат, который использует международно признанный стандарт X.509 PKI для проверки того, что открытый ключ принадлежит подписывающему лицу, включенному в сертификат. Чтобы сделать это, используйте Create Метод в пределах CertificateHolder класс.
В следующих разделах объясняется, как добавить цифровую подпись, строку подписи и как подписать сгенерированный документ PDF.
Подписать документ
Aspose.Words позволяет подписать DOC, DOCX, XPS, или документ ODT в цифровом виде с использованием Sign метод и SignOptions свойств.
Следующий пример кода показывает, как подписывать документы с использованием держателя сертификата и опций подписи:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
CertificateHolder certHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw"); | |
DigitalSignatureUtil.Sign(MyDir + "Digitally signed.docx", ArtifactsDir + "Document.Signed.docx", | |
certHolder); |
Добавить строку подписи
Линия подписи - это визуальное представление цифровой подписи в документе. Aspose.Words позволяет вставить строку подписи с помощью DocumentBuilder.InsertSignatureLine метод. Вы также можете установить параметры для этого представления, используя SignatureLineOptions класс.
Например, на рисунке ниже показано, как могут отображаться действительные и недействительные подписи.


Кроме того, если документ содержит строку подписи и нет цифровой подписи, есть функция, чтобы попросить пользователя добавить подпись.
Следующий пример кода показывает, как подписать документ с личным сертификатом и конкретной строкой подписи:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
SignatureLineOptions signatureLineOptions = new SignatureLineOptions | |
{ | |
Signer = "yourname", | |
SignerTitle = "Worker", | |
Email = "yourname@aspose.com", | |
ShowDate = true, | |
DefaultInstructions = false, | |
Instructions = "Please sign here.", | |
AllowComments = true | |
}; | |
SignatureLine signatureLine = builder.InsertSignatureLine(signatureLineOptions).SignatureLine; | |
signatureLine.ProviderId = Guid.Parse("CF5A7BB4-8F3C-4756-9DF6-BEF7F13259A2"); | |
doc.Save(ArtifactsDir + "SignDocuments.SignatureLineProviderId.docx"); | |
SignOptions signOptions = new SignOptions | |
{ | |
SignatureLineId = signatureLine.Id, | |
ProviderId = signatureLine.ProviderId, | |
Comments = "Document was signed by Aspose", | |
SignTime = DateTime.Now | |
}; | |
CertificateHolder certHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw"); | |
DigitalSignatureUtil.Sign(ArtifactsDir + "SignDocuments.SignatureLineProviderId.docx", | |
ArtifactsDir + "SignDocuments.CreateNewSignatureLineAndSetProviderId.docx", certHolder, signOptions); |
Подпишите генерируемый PDF-документ
Aspose.Words позволяет вам подписать и получить все детали PDF-документа, используя PdfDigitalSignatureDetails свойств.
Следующий пример кода показывает, как подписать сгенерированный PDF:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.Writeln("Test Signed PDF."); | |
PdfSaveOptions saveOptions = new PdfSaveOptions | |
{ | |
DigitalSignatureDetails = new PdfDigitalSignatureDetails( | |
CertificateHolder.Create(MyDir + "morzal.pfx", "aw"), "reason", "location", | |
DateTime.Now) | |
}; | |
doc.Save(ArtifactsDir + "WorkingWithPdfSaveOptions.DigitallySignedPdfUsingCertificateHolder.pdf", saveOptions); |
Восстановление ценности цифровой подписи
Aspose.Words также обеспечивает возможность извлечения значения цифровой подписи из документа с цифровой подписью в виде байтового массива с использованием SignatureValue собственность.
Следующий пример кода показывает, как получить значение цифровой подписи в виде байтового массива из документа:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(MyDir + "Digitally signed.docx"); | |
foreach (DigitalSignature digitalSignature in doc.DigitalSignatures) | |
{ | |
string signatureValue = Convert.ToBase64String(digitalSignature.SignatureValue); | |
Assert.AreEqual("K1cVLLg2kbJRAzT5WK+m++G8eEO+l7S+5ENdjMxxTXkFzGUfvwxREuJdSFj9AbD" + | |
"MhnGvDURv9KEhC25DDF1al8NRVR71TF3CjHVZXpYu7edQS5/yLw/k5CiFZzCp1+MmhOdYPcVO+Fm" + | |
"+9fKr2iNLeyYB+fgEeZHfTqTFM2WwAqo=", signatureValue); | |
} |
Удалить цифровые подписи
Aspose.Words позволяет удалить все цифровые подписи из подписанного документа с помощью RemoveAllSignatures метод.
Следующий пример кода показывает, как загрузить и удалить цифровые подписи из документа:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
// There are two ways of using the DigitalSignatureUtil class to remove digital signatures | |
// from a signed document by saving an unsigned copy of it somewhere else in the local file system. | |
// 1 - Determine the locations of both the signed document and the unsigned copy by filename strings: | |
DigitalSignatureUtil.RemoveAllSignatures(MyDir + "Digitally signed.docx", | |
ArtifactsDir + "DigitalSignatureUtil.LoadAndRemove.FromString.docx"); | |
// 2 - Determine the locations of both the signed document and the unsigned copy by file streams: | |
using (Stream streamIn = new FileStream(MyDir + "Digitally signed.docx", FileMode.Open)) | |
{ | |
using (Stream streamOut = new FileStream(ArtifactsDir + "DigitalSignatureUtil.LoadAndRemove.FromStream.docx", FileMode.Create)) | |
{ | |
DigitalSignatureUtil.RemoveAllSignatures(streamIn, streamOut); | |
} | |
} | |
// Verify that both our output documents have no digital signatures. | |
Assert.That(DigitalSignatureUtil.LoadSignatures(ArtifactsDir + "DigitalSignatureUtil.LoadAndRemove.FromString.docx"), Is.Empty); | |
Assert.That(DigitalSignatureUtil.LoadSignatures(ArtifactsDir + "DigitalSignatureUtil.LoadAndRemove.FromStream.docx"), Is.Empty); |