Pracuj z podpisami cyfrowymi
Podpis cyfrowy to technologiczne wdrożenie podpisów elektronicznych do podpisywania dokumentów i uwierzytelniania podpisującego w celu zagwarantowania, że dokument nie został zmodyfikowany od czasu jego podpisania. Każdy podpis cyfrowy jest unikalny dla każdego podpisującego ze względu na przestrzeganie protokołu PKI w celu generowania zarówno kluczy publicznych, jak i prywatnych. Podpisanie dokumentu cyfrowo oznacza utworzenie podpisu przy użyciu klucza prywatnego osoby podpisującej, przy czym algorytm matematyczny służy do szyfrowania wygenerowanego skrótu.
Aspose.Words pozwala wykryć, zliczyć lub zweryfikować istniejące podpisy cyfrowe, a także dodać nowy podpis do dokumentu, aby wykryć wszelkie manipulacje. Możesz także usunąć wszystkie podpisy cyfrowe z dokumentu. Użyj klasy DigitalSignatureUtil do pracy z podpisami cyfrowymi.
W tym artykule wyjaśniono, jak wykonać wszystkie powyższe czynności, aby zweryfikować autentyczność i integralność dokumentu cyfrowego.
Spróbuj online
Możesz wypróbować tę funkcjonalność w naszym Bezpłatny podpis online.
Obsługiwane formaty
Aspose.Words umożliwia pracę z podpisami cyfrowymi na dokumentach DOC, OOXML i ODT oraz podpisywanie wygenerowanego dokumentu w formacie PDF lub XPS.
Ograniczenia podpisów cyfrowych
Poniższa tabela opisuje kilka ograniczeń, które możesz napotkać podczas pracy z podpisami cyfrowymi za pośrednictwem Aspose.Words, a także kilka alternatywnych opcji.
Ograniczenie | Alternatywna opcja |
---|---|
Utrata podpisów cyfrowych na dokumencie po jego załadowaniu i zapisaniu. Dlatego przetwarzanie dokumentu na serwer może spowodować utratę wszystkich podpisów cyfrowych bez powiadomienia | Sprawdź, czy dokument ma podpisy cyfrowe i podejmij odpowiednie działania, jeśli je znajdziesz. Na przykład wyślij alert do klientów, informując ich, że przesyłany przez nich dokument zawiera podpisy cyfrowe, które zostaną utracone w przypadku przetwarzania |
Aspose.Words obsługuje pracę z makrami w dokumencie. Ale Aspose.Words nie obsługuje jeszcze podpisów cyfrowych w makrach | Wyeksportuj dokument z powrotem do dowolnego formatu Worda i użyj Microsoft Word, aby dodać podpis cyfrowy do makr |
Wykrywaj, licz i weryfikuj podpisy cyfrowe
Aspose.Words umożliwia wykrycie podpisu cyfrowego w dokumencie za pomocą metody DetectFileFormat i właściwości HasDigitalSignature. Warto zaznaczyć, że taka kontrola wykryje jedynie fakt złożenia podpisu, ale nie jego ważność.
Dokument można podpisać więcej niż raz i mogą to robić różni użytkownicy. Aby sprawdzić ważność podpisów cyfrowych należy je wczytać z dokumentu metodą LoadSignatures i skorzystać z właściwości IsValid. Również Aspose.Words umożliwia policzenie zestawu wszystkich podpisów cyfrowych w dokumencie przy użyciu właściwości Count.
Wszystko to zapewnia skuteczny i bezpieczny sposób sprawdzenia dokumentu pod kątem podpisów przed jego przetworzeniem.
Poniższy przykład kodu pokazuje, jak wykryć obecność podpisów cyfrowych i je zweryfikować:
// 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."); | |
} |
Utwórz podpis cyfrowy
Aby utworzyć podpis cyfrowy, konieczne będzie załadowanie certyfikatu podpisu potwierdzającego tożsamość. Wysyłając dokument podpisany cyfrowo, wysyłasz także swój certyfikat i klucz publiczny.
Aspose.Words umożliwia utworzenie certyfikatu X.509, certyfikatu cyfrowego wykorzystującego międzynarodowy standard X.509 PKI w celu sprawdzenia, czy klucz publiczny należy do osoby podpisującej zawartej w certyfikacie. Aby to zrobić, użyj metody Create w klasie CertificateHolder.
W kolejnych sekcjach wyjaśniono, jak dodać podpis cyfrowy, linię podpisu i jak podpisać wygenerowany dokument PDF.
Podpisz dokument
Aspose.Words umożliwia cyfrowe podpisywanie dokumentów DOC, DOCX, XPS lub ODT przy użyciu metody Sign i właściwości SignOptions.
Poniższy przykład kodu pokazuje, jak podpisywać dokumenty przy użyciu posiadacza certyfikatu i opcji podpisywania:
// 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); |
Dodaj linię podpisu
Linia podpisu to wizualna reprezentacja podpisu cyfrowego w dokumencie. Aspose.Words umożliwia wstawienie linii podpisu metodą DocumentBuilder.InsertSignatureLine. Można także ustawić parametry tej reprezentacji za pomocą klasy SignatureLineOptions.
Na przykład poniższy obrazek pokazuje, jak mogą być wyświetlane ważne i nieważne podpisy.
![rysunek](/words/net/working-with-digital-signatures/valid.png)
![rysunek](/words/net/working-with-digital-signatures/invalid.png)
Ponadto, jeśli dokument zawiera linię podpisu i nie zawiera podpisu cyfrowego, dostępna jest funkcja prosząca użytkownika o dodanie podpisu.
Poniższy przykład kodu pokazuje, jak podpisać dokument za pomocą certyfikatu osobistego i określonej linii podpisu:
// 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); |
Podpisz wygenerowany dokument PDF
Aspose.Words umożliwia podpisanie i uzyskanie wszystkich szczegółów dokumentu PDF przy użyciu właściwości PdfDigitalSignatureDetails.
Poniższy przykład kodu pokazuje, jak podpisać wygenerowany plik 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); |
Pobierz wartość podpisu cyfrowego
Aspose.Words zapewnia także możliwość pobrania wartości podpisu cyfrowego z dokumentu podpisanego cyfrowo w postaci tablicy bajtów przy użyciu właściwości SignatureValue.
Poniższy przykład kodu pokazuje, jak uzyskać wartość podpisu cyfrowego w postaci tablicy bajtów z dokumentu:
// 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); | |
} |
Usuń podpisy cyfrowe
Aspose.Words umożliwia usunięcie wszystkich podpisów cyfrowych z podpisanego dokumentu metodą RemoveAllSignatures.
Poniższy przykład kodu pokazuje, jak załadować i usunąć podpisy cyfrowe z dokumentu:
// 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); |