Security
Security
Ta strona opisuje hasła, szyfrowanie i podpisy cyfrowe. Document.OpenFile() / Document.Open() akceptują hasło, aby otworzyć chroniony dokument, Document.Save() akceptuje opcję encrypt, aby zabezpieczyć go, a Document.Sign() / Document.Certify() / Document.VerifySignatures() dodają i sprawdzają podpisy cyfrowe.
Otwieranie i odszyfrowywanie dokumentów zabezpieczonych hasłem
Przekaż { password: '...' } do Document.OpenFile() lub Document.Open(), aby otworzyć dokument zabezpieczony hasłem użytkownika. Jeśli hasło jest brakujące lub nieprawidłowe, wywołanie zgłasza InvalidPasswordError.
import { Document, InvalidPasswordError } from '@asposefoss/pdf';
try {
const doc = Document.OpenFile('secret.pdf', { password: 'hunter2' });
doc.WriteTo('decrypted.pdf'); // output is plaintext
} catch (e) {
if (e instanceof InvalidPasswordError) console.error('wrong password');
else throw e;
}Szyfrowanie przy zapisie
Document.Save() (i Document.WriteTo()) akceptują opcję encrypt. Szyfrowanie oparte na haśle jest najczęstszym przypadkiem; biblioteka obsługuje także szyfrowanie kluczem publicznym dla jednego lub wielu certyfikatów odbiorcy, które otwierane jest ponownie przy użyciu prywatnego klucza odbiorcy.
// Encrypt to one or more recipient certificates (PEM string or DER bytes):
const bytes = doc.Save({
encrypt: {
recipients: [{ certificate: recipientCertPem }],
algorithm: 'aes256', // 'aes256' (default) | 'aes128' | 'rc4'
permissions: { copying: false }, // shared across all recipients
},
});
// Open with the recipient's private key + certificate, or a PKCS#12 bundle:
const opened = Document.Open(bytes, {
recipient: { privateKey, certificate: recipientCertPem },
});
console.log(opened.Permissions); // recovered permission flags (not enforced)
Podpisywanie i certyfikowanie
Document.Certify() dodaje podpis certyfikacyjny (autora) niosący transformację DocMDP, która określa, które późniejsze zmiany są dozwolone; Document.Sign() dodaje kolejny, zwykły podpis zatwierdzający, który może być dołączany stopniowo na wierzchu. Oba przyjmują sygnującego { certificate, privateKey } oraz obiekt opcji (reason, location, name, fieldName oraz — dla Certify() — permissions).
const certifying = Document.OpenFile('report.pdf');
await certifying.Certify(
{ certificate: author.certificate, privateKey: author.privateKey },
{ permissions: 'form-fill', reason: 'Certifying the report', fieldName: 'Certification' },
);
const certifiedBytes = certifying.Save();
const approving = Document.Open(certifiedBytes);
await approving.Sign(
{ certificate: approver.certificate, privateKey: approver.privateKey },
{ reason: 'Approved for publication', fieldName: 'Approval' },
);
approving.WriteTo('signed.pdf');Weryfikacja podpisów
Document.VerifySignatures() sprawdza każdy podpis w dokumencie: przelicza ponownie każdy skrót /ByteRange, weryfikuje odłączony CMS i zgłasza, co się zmieniło po każdym podpisie. Zwraca SignatureReport[], po jednym wpisie na podpis.
const reports = await Document.OpenFile('signed.pdf').VerifySignatures();
for (const r of reports) {
console.log(r.name, 'integrity:', r.integrity, 'signature:', r.signature);
}Wskazówki i najlepsze praktyki
- Przechwytuj
InvalidPasswordErrorkonkretnie przed szerszym catch-all przy otwieraniu niezaufanego wejścia, aby móc reagować inaczej na złe hasło niż na uszkodzony plik. - Wywołaj
Certify()przed jakimikolwiek wywołaniamiSign()— podpis certyfikacyjny ustala uprawnienia DocMDP, na które późniejsze podpisy zatwierdzające są nakładane. Document.Open()zwraca odzyskanePermissionspo odszyfrowaniu kluczem publicznym, ale biblioteka nie wymusza ich samodzielnie — traktuj je jako informacyjne.VerifySignatures()jestasync—awaitto (lub obsłuż zwróconyPromise) przed odczytaniem tablicy raportów.
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
Document.OpenFile() / Document.Open() generuje InvalidPasswordError | Dokument jest zabezpieczony hasłem i nie podano hasła lub podano niewłaściwe | Przekaż { password: '...' } do Document.OpenFile() / Document.Open() |
| Deszyfrowanie kluczem publicznym nie powiodło się | Przekazano niewłaściwy klucz prywatny lub certyfikat, lub żaden z nich nie pasuje do żadnego wpisu recipients użytego w czasie szyfrowania | Potwierdź, że opcja recipient ma privateKey / certificate (lub pakiet PKCS#12) pasuje do jednego z pierwotnych odbiorców |
| Podpis zatwierdzający unieważnia certyfikację | Sign() został wywołany z uprawnieniami, których transformacja certyfikująca DocMDP nie zezwala | Ustaw wartość permissions na Certify() (np. 'form-fill') wystarczająco szeroką, aby pomieścić zmiany, które wprowadzą późniejsi podpisujący |
VerifySignatures() zgłasza przerwaną kontrolę integralności | Podpisane bajty zostały zmodyfikowane po podpisaniu, poza przyrostową aktualizacją, którą obejmuje podpis | Podpisz ponownie dokument po wszelkich dalszych edycjach |
FAQ
Jaka jest różnica między Sign a Certify?
Certify() dodaje pierwszy, certyfikujący podpis i deklaruje (poprzez transformację DocMDP), jakie późniejsze zmiany są dozwolone. Sign() dodaje zwykły podpis zatwierdzający, dołączany stopniowo na wierzchu wszystkiego, co było wcześniej.
Jak otworzyć zabezpieczony hasłem plik PDF?
Przekaż { password: '...' } do Document.OpenFile() lub Document.Open() i przechwyć InvalidPasswordError, jeśli hasło może być nieprawidłowe.
Czy ta biblioteka egzekwuje flagi uprawnień PDF?
Nie. Document.Open() odzyskuje flagi Permissions z zaszyfrowanego dokumentu, abyś mógł je przejrzeć, ale sama nie ogranicza tego, co Twój kod może zrobić z otwartym dokumentem.
Jak sprawdzić, czy podpisy w podpisanym pliku PDF są nadal ważne?
Wywołaj Document.VerifySignatures() (metodę async) i sprawdź pola integrity i signature każdego zwróconego SignatureReport.
API Reference Podsumowanie
| Klasa/Metoda | Opis |
|---|---|
Document.OpenFile() / Document.Open() | Otwórz dokument, opcjonalnie chroniony hasłem lub kluczem publicznym |
InvalidPasswordError | Rzucany, gdy hasło jest brakujące lub nieprawidłowe |
Document.Save() / Document.WriteTo() | Zapisz dokument, opcjonalnie z opcją encrypt |
Permissions | Odzyskano flagi uprawnień z zaszyfrowanego dokumentu |
Document.Certify() | Dodaj podpis certyfikacji (autora) z transformacją DocMDP |
Document.Sign() | Dodaj podpis zatwierdzający |
Document.VerifySignatures() | Zweryfikuj każdy podpis w dokumencie |
SignatureReport | Wynik weryfikacji jednego podpisu: name, integrity, signature |