Security

Security

Tato stránka se zabývá hesly, šifrováním a digitálními podpisy. Document.OpenFile() / Document.Open() přijímají heslo pro otevření chráněného dokumentu, Document.Save() přijímá možnost encrypt pro jeho ochranu a Document.Sign() / Document.Certify() / Document.VerifySignatures() přidávají a kontrolují digitální podpisy.


Otevírání a dešifrování dokumentů chráněných heslem

Předávejte { password: '...' } do Document.OpenFile() nebo Document.Open() pro otevření dokumentu chráněného uživatelským heslem. Pokud je heslo chybějící nebo nesprávné, volání vyhodí 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;
}

Šifrování při ukládání

Document.Save() (a také Document.WriteTo()) přijímají možnost encrypt. Šifrování založené na hesle je běžný případ; knihovna také podporuje šifrování pomocí veřejného klíče pro jeden nebo více certifikátů příjemců, které se opět otevírají soukromým klíčem příjemce.

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

Podepisování a certifikace

Document.Certify() přidává certifikační (autor) podpis nesoucí DocMDP transformaci, která deklaruje, jaké pozdější změny jsou povoleny; Document.Sign() přidává další, obyčejný schvalovací podpis, který může být postupně připojen navrchu. Oba přijímají { certificate, privateKey } signatáře a objekt možností (reason, location, name, fieldName a — pro 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');

Ověřování podpisů

Document.VerifySignatures() kontroluje každý podpis v dokumentu: přepočítá každý /ByteRange digest, ověří oddělený CMS a nahlásí, co se změnilo po každém podpisu. Vrací SignatureReport[], jeden záznam 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);
}

Tipy a osvědčené postupy

  • Zachyťte InvalidPasswordError specificky před obecnějším zachytáváním při otevírání nedůvěryhodného vstupu, abyste mohli reagovat odlišně na špatné heslo než na poškozený soubor.
  • Zavolejte Certify() před jakýmikoli voláními Sign() — certifikační podpis stanoví DocMDP oprávnění, na která jsou později vrstveny schvalovací podpisy.
  • Document.Open() vrací obnovené Permissions po dešifrování veřejným klíčem, ale knihovna je sama nevyžaduje — považujte je za informační.
  • VerifySignatures() je async — await to (nebo zpracujte vrácené Promise) před čtením pole zpráv.

Časté problémy

ProblémPříčinaOprava
Document.OpenFile() / Document.Open() vyvolává InvalidPasswordErrorDokument je chráněn heslem a nebylo poskytnuto žádné heslo, nebo bylo poskytnuto špatné hesloPředat { password: '...' } do Document.OpenFile() / Document.Open()
Dešifrování veřejným klíčem selžeByl předán nesprávný soukromý klíč nebo certifikát, nebo žádný z nich neodpovídá žádné položce recipients použité při šifrováníPotvrďte, že recipient volba privateKey / certificate (nebo svazek PKCS#12) odpovídá jednomu z původních příjemců
Schvalovací podpis ruší certifikaciSign() bylo voláno s oprávněními, která certifikační transformace DocMDP neumožňujeNastavte hodnotu permissions na Certify() (např. 'form-fill') tak širokou, aby pokryla změny, které pozdější podepisovatelé provedou
VerifySignatures() hlásí selhání kontroly integrityPodepsané bajty byly po podepsání upraveny, mimo inkrementální aktualizaci, kterou podpis pokrýváZnovu podepište dokument po jakýchkoli dalších úpravách

FAQ

Jaký je rozdíl mezi Sign a Certify?

Certify() přidává první, certifikační podpis a deklaruje (prostřednictvím transformace DocMDP), jaké pozdější změny jsou povoleny. Sign() přidává běžný schvalovací podpis, který je postupně připojován nad to, co bylo předtím.

Jak otevřu PDF chráněné heslem?

Předávejte { password: '...' } do Document.OpenFile() nebo Document.Open() a zachyťte InvalidPasswordError, pokud by heslo mohlo být špatné.

Vynucuje tato knihovna příznaky oprávnění PDF?

Ne. Document.Open() obnoví příznaky Permissions z šifrovaného dokumentu, aby je bylo možné zkontrolovat, ale sama neomezuje, co může váš kód dělat s otevřeným dokumentem.

Jak mohu zjistit, zda jsou podpisy podepsaného PDF stále platné?

Zavolejte Document.VerifySignatures() (metoda async) a prohlédněte si pole integrity a signature u každého vráceného SignatureReport.


API Reference Shrnutí

Třída/MetodaPopis:
Document.OpenFile() / Document.Open()Otevřete dokument, volitelně chráněný heslem nebo veřejným klíčem
InvalidPasswordErrorVyvoláno, když chybí heslo nebo je nesprávné
Document.Save() / Document.WriteTo()Uložit dokument, volitelně s možností encrypt
PermissionsObnoveny příznaky oprávnění z šifrovaného dokumentu
Document.Certify()Přidat certifikační (autor) podpis s transformací DocMDP
Document.Sign()Přidat schvalovací podpis
Document.VerifySignatures()Ověřte každý podpis v dokumentu
SignatureReportVýsledek ověření jednoho podpisu: name, integrity, signature

Viz také:

 Čeština