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
InvalidPasswordErrorspecificky 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ímiSign()— certifikační podpis stanoví DocMDP oprávnění, na která jsou později vrstveny schvalovací podpisy. Document.Open()vrací obnovenéPermissionspo dešifrování veřejným klíčem, ale knihovna je sama nevyžaduje — považujte je za informační.VerifySignatures()jeasync—awaitto (nebo zpracujte vrácenéPromise) před čtením pole zpráv.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
Document.OpenFile() / Document.Open() vyvolává InvalidPasswordError | Dokument je chráněn heslem a nebylo poskytnuto žádné heslo, nebo bylo poskytnuto špatné heslo | Předat { password: '...' } do Document.OpenFile() / Document.Open() |
| Dešifrování veřejným klíčem selže | Byl 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ší certifikaci | Sign() bylo voláno s oprávněními, která certifikační transformace DocMDP neumožňuje | Nastavte hodnotu permissions na Certify() (např. 'form-fill') tak širokou, aby pokryla změny, které pozdější podepisovatelé provedou |
VerifySignatures() hlásí selhání kontroly integrity | Podepsané 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/Metoda | Popis: |
|---|---|
Document.OpenFile() / Document.Open() | Otevřete dokument, volitelně chráněný heslem nebo veřejným klíčem |
InvalidPasswordError | Vyvoláno, když chybí heslo nebo je nesprávné |
Document.Save() / Document.WriteTo() | Uložit dokument, volitelně s možností encrypt |
Permissions | Obnoveny 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 |
SignatureReport | Výsledek ověření jednoho podpisu: name, integrity, signature |