Lucrul cu semnături digitale

O semnătură digitală este utilizată pentru autentificarea unui document pentru a stabili că expeditorul documentului este cine spune că este și că conținutul documentului nu a fost modificat.

Aspose.Words acceptă documente cu semnături digitale și oferă acces la acestea, permițându-vă să detectați și să validați semnăturile digitale pe un document și să semnați un document PDF generat cu un certificat furnizat. În prezent, semnăturile digitale sunt acceptate pe documentele DOC, OOXML și ODT. Semnarea documentelor generate este acceptată în format PDF.

Semnăturile digitale nu sunt păstrate pe Open și Save

Un punct important de remarcat este că un document încărcat și apoi salvat folosind Aspose.Words va pierde orice semnături digitale semnate pe document. Aceasta este prin design, deoarece o semnătură digitală asigură că conținutul nu a fost modificat și, în plus, autentifică identitatea persoanei care a semnat documentul. Aceste principii ar fi invalidate dacă semnăturile originale ar fi transferate în documentul rezultat.

Din acest motiv, dacă procesați documente încărcate pe un server, acest lucru ar putea însemna că puteți corupe un document încărcat pe serverul dvs. în acest fel fără să știți. Prin urmare, cel mai bine este să verificați semnăturile digitale pe un document și să luați măsurile corespunzătoare dacă se găsesc, de exemplu, o alertă poate fi trimisă clientului informându-l că documentul pe care îl transmite conține semnături digitale care se vor pierde dacă este procesat. Puteți descărca fișierul șablon al acestui exemplu din aici.

Codul de mai sus utilizează metoda FileFormatUtil.detect_file_format pentru a detecta dacă un document conține semnături digitale fără a încărca mai întâi documentul. Aceasta oferă o modalitate eficientă și sigură de a verifica semnăturile unui document înainte de a le procesa. Când este executată, metoda returnează un obiect FileFormatInfo care furnizează proprietatea FileFormatInfo.has_digital_signature. Această proprietate returnează true dacă documentul conține una sau mai multe semnături digitale. Este important să rețineți că această metodă nu validează semnăturile, ci determină doar dacă semnăturile sunt prezente. Validarea semnăturilor digitale este prezentată în secțiunea următoare.

Semnături digitale pe macrocomenzi (VBA proiecte)

Semnăturile digitale de pe macrocomenzi nu pot fi accesate sau semnate. Acest lucru se datorează faptului că Aspose.Words nu se ocupă direct de macrocomenzi într-un document. Cu toate acestea, semnăturile digitale pe macrocomenzi sunt păstrate atunci când exportați documentul înapoi în orice format word. Aceste semnături pot fi păstrate pe codul VBA deoarece conținutul binar al macrocomenzilor nu este modificat chiar dacă documentul în sine este modificat.

Accesați și verificați semnăturile digitale

Un document poate avea mai multe semnături digitale. Aceste semnături pot fi accesate prin colecția Document.digital_signatures. Fiecare obiect returnat este un DigitalSignature care reprezintă o singură semnătură digitală aparținând documentului. Aceasta oferă membrilor care vă permit să verificați validitatea semnăturii.

Cea mai importantă proprietate de verificat cu semnături digitale este valabilitatea fiecărei semnături din document. Toate semnăturile din document pot fi validate simultan apelând proprietatea DigitalSignatureCollection.is_valid. Aceasta va returna true dacă toate semnăturile din document sunt valide sau dacă documentul nu are semnături și false dacă cel puțin o semnătură digitală nu este validă.

Fiecare semnătură poate fi, de asemenea, validată individual prin apelarea DigitalSignature.is_valid. O semnătură poate reveni nevalidă din mai multe motive, de exemplu documentul a fost modificat de la semnare sau certificatul a expirat. În plus, detalii suplimentare ale semnăturii pot fi, de asemenea, accesate. Eșantionul de cod de mai jos arată cum să validați fiecare semnătură dintr-un document și să afișați informații de bază despre semnătură. Puteți descărca fișierul șablon al acestui exemplu din aici.

Semnarea Documentelor Word

DigitalSignatureUtil clasa oferă metode pentru semnarea documentului. DigitalSignatureUtil.sign metoda semnează documentul sursă folosind dat CertificateHolder cu semnătură digitală și scrie documentul semnat în fluxul de destinație.

Exemplul de mai jos arată cum să semnați un document simplu.

Exemplul de mai jos arată cum să semneze documentul criptat.

Semnarea documentului Word cu linia de semnătură

Puteți semna documentul sursă folosind dat CertificateHolder și SignOptions cu semnătură digitală și scrie documentul semnat în fișierul destinație. Folosind clasa SignOptions Puteți specifica opțiuni pentru semnarea documentelor. Exemplul de mai jos arată cum să creați o nouă linie de semnătură și un document de semnare.

Exemplul de mai jos arată cum să modificați linia de semnătură existentă și documentul de semnare.

Semnarea documentului Word utilizând identificatorul furnizorului de semnături

Exemplul de mai jos arată cum să semnați documentul Word utilizând identificatorul furnizorului de semnături. Furnizorul de servicii criptografice (CSP) este un modul software independent care efectuează de fapt algoritmi de criptografie pentru autentificare, codificare și criptare. MS Office își rezervă valoarea {00000000-0000-0000-0000-000000000000} Pentru furnizorul său implicit de semnături.

Creați un nou Document de semnare a liniei de semnătură utilizând identificatorul furnizorului

Exemplul de mai jos arată cum să creați linia de semnătură și să semnați documentul Word utilizând identificatorul furnizorului de semnătură.

Regăsiți valoarea semnăturii digitale

Aspose.Words oferă, de asemenea, posibilitatea de a prelua valoarea semnăturii digitale dintr-un document semnat digital ca matrice de octeți folosind proprietatea SignatureValue.

Următorul exemplu de cod arată cum se obține valoarea semnăturii digitale ca matrice de octeți dintr-un document:

doc = aw.Document(MY_DIR + "Digitally signed.docx")

for digital_signature in doc.digital_signatures:
    signature_value = base64.b64encode(digital_signature.signature_value)
    print(f"Base64 signature value is: {signature_value}")