Робота з цифровими підписами

Цифровий підпис - це технологічна реалізація електронних підписів на реєстраційні документи та автентифікувати підписника, щоб гарантувати, що документ не був модифікований, оскільки він підписаний. Кожен цифровий підпис унікальний для кожного підписника через протокол 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);

Додавання лінії Signature

У документі є візуальне представлення цифрового підпису. Aspose.Words дозволяє вставляти підписну лінію за допомогою DocumentBuilder.InsertSignatureLine метод. Ви також можете встановити параметри для цього представлення за допомогою SignatureLineOptions клас.

Наприклад, картина нижче показує, як можна відображати дійсні та недійсні підписи.

drawing drawing

Також, якщо документ містить підписну лінію та цифровий підпис, існує можливість попросити користувача додати підпис.

Наприклад, наступний код показує, як записати документ з персональним сертифікатом та конкретною лінійкою підписів:

// 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);

Доступ до цифрового значення Signature

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);