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 InvalidPasswordError konkretnie 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łaniami Sign() — podpis certyfikacyjny ustala uprawnienia DocMDP, na które późniejsze podpisy zatwierdzające są nakładane.
  • Document.Open() zwraca odzyskane Permissions po odszyfrowaniu kluczem publicznym, ale biblioteka nie wymusza ich samodzielnie — traktuj je jako informacyjne.
  • VerifySignatures() jest async — await to (lub obsłuż zwrócony Promise) przed odczytaniem tablicy raportów.

Typowe problemy

ProblemPrzyczynaRozwiązanie
Document.OpenFile() / Document.Open() generuje InvalidPasswordErrorDokument jest zabezpieczony hasłem i nie podano hasła lub podano niewłaściwePrzekaż { 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 szyfrowaniaPotwierdź, ż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 zezwalaUstaw 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ściPodpisane bajty zostały zmodyfikowane po podpisaniu, poza przyrostową aktualizacją, którą obejmuje podpisPodpisz 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/MetodaOpis
Document.OpenFile() / Document.Open()Otwórz dokument, opcjonalnie chroniony hasłem lub kluczem publicznym
InvalidPasswordErrorRzucany, gdy hasło jest brakujące lub nieprawidłowe
Document.Save() / Document.WriteTo()Zapisz dokument, opcjonalnie z opcją encrypt
PermissionsOdzyskano 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
SignatureReportWynik weryfikacji jednego podpisu: name, integrity, signature

Zobacz także

 Polski