Security
Security
Diese Seite behandelt Passwörter, Verschlüsselung und digitale Signaturen. Document.OpenFile() / Document.Open() akzeptieren ein Passwort, um ein geschütztes Dokument zu öffnen, Document.Save() akzeptiert eine encrypt-Option, um eines zu schützen, und Document.Sign() / Document.Certify() / Document.VerifySignatures() fügen digitale Signaturen hinzu und prüfen sie.
Öffnen und Entschlüsseln passwortgeschützter Dokumente
Übergeben Sie { password: '...' } an Document.OpenFile() oder Document.Open(), um ein Dokument zu öffnen, das mit einem Benutzerpasswort geschützt ist. Fehlt das Passwort oder ist es falsch, wirft der Aufruf 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;
}Verschlüsseln beim Speichern
Document.Save() (und Document.WriteTo()) akzeptieren eine encrypt-Option. Passwortbasierte Verschlüsselung ist der gängige Fall; die Bibliothek unterstützt außerdem Public-Key-Verschlüsselung für ein oder mehrere Empfängerzertifikate, die erneut mit dem privaten Schlüssel des Empfängers geöffnet werden.
// 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)
Signieren und Zertifizieren
Document.Certify() fügt eine Zertifizierungs-(Autor-)Signatur hinzu, die eine DocMDP-Transformation trägt und festlegt, welche späteren Änderungen erlaubt sind; Document.Sign() fügt eine weitere, gewöhnliche Genehmigungs-Signatur hinzu, die schrittweise oben angehängt werden kann. Beide nehmen einen { certificate, privateKey } Signierer und ein Options-Objekt (reason, location, name, fieldName und — für Certify() — permissions) entgegen.
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');Signaturen verifizieren
Document.VerifySignatures() prüft jede Signatur im Dokument: Sie berechnet jedes /ByteRange Digest neu, verifiziert das losgelöste CMS und meldet, was nach jeder Signatur geändert wurde. Sie gibt ein SignatureReport[] zurück, ein Eintrag pro Signatur.
const reports = await Document.OpenFile('signed.pdf').VerifySignatures();
for (const r of reports) {
console.log(r.name, 'integrity:', r.integrity, 'signature:', r.signature);
}Tipps und bewährte Vorgehensweisen
- Fange
InvalidPasswordErrorgezielt ab, bevor ein weiter gefasster Catch-All-Block beim Öffnen von nicht vertrauenswürdigen Eingaben greift, damit du anders auf ein falsches Passwort als auf eine beschädigte Datei reagieren kannst. - Rufe
Certify()vor allenSign()-Aufrufen auf — eine Zertifizierungs-Signatur legt die DocMDP-Berechtigungen fest, auf die spätere Genehmigungs-Signaturen aufsetzen. Document.Open()liefert wiederhergestelltePermissionsnach der Public-Key-Entschlüsselung zurück, aber die Bibliothek erzwingt sie nicht selbst — betrachte sie als informativ.VerifySignatures()istasync—awaites (oder verarbeite das zurückgegebenePromise), bevor du das Bericht-Array liest.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
Document.OpenFile() / Document.Open() wirft InvalidPasswordError | Das Dokument ist passwortgeschützt und es wurde kein Passwort oder das falsche Passwort angegeben. | Übergebe { password: '...' } an Document.OpenFile() / Document.Open() |
| Public-Key-Entschlüsselung schlägt fehl | Der falsche private Schlüssel oder das falsche Zertifikat wurde übergeben, oder keiner von beiden stimmt mit einem recipients-Eintrag überein, der zur Verschlüsselungszeit verwendet wurde. | Bestätigen Sie, dass die recipient-Option privateKey / certificate (oder PKCS#12-Bündel) mit einem der ursprünglichen Empfänger übereinstimmt |
| Eine Genehmigungsunterschrift macht die Zertifizierung ungültig | Sign() wurde mit Berechtigungen aufgerufen, die die zertifizierende DocMDP-Transformation nicht erlaubt | Legen Sie einen permissions-Wert für Certify() fest (z.B. 'form-fill'), der breit genug ist für die Änderungen, die spätere Unterzeichner vornehmen werden |
VerifySignatures() meldet eine fehlerhafte Integritätsprüfung | Die signierten Bytes wurden nach der Signatur geändert, außerhalb eines inkrementellen Updates, das die Signatur abdeckt | Signieren Sie das Dokument nach weiteren Änderungen erneut |
FAQ
Was ist der Unterschied zwischen Sign und Certify?
Certify() fügt die erste, Zertifizierungs-Signatur hinzu und erklärt (via einer DocMDP-Transformation), welche späteren Änderungen zulässig sind. Sign() fügt eine gewöhnliche Genehmigungs-Signatur hinzu, die schrittweise oben auf das Vorherige angehängt wird.
Wie öffne ich ein passwortgeschütztes PDF?
Übergib { password: '...' } an Document.OpenFile() oder Document.Open() und fange InvalidPasswordError ab, falls das Passwort falsch sein könnte.
Erzwingt diese Bibliothek PDF-Berechtigungs-Flags?
Nein. Document.Open() stellt die Permissions-Flags aus einem verschlüsselten Dokument wieder her, damit Sie sie prüfen können, schränkt aber nicht ein, was Ihr Code mit dem geöffneten Dokument tun darf.
Wie prüfe ich, ob die Signaturen eines signierten PDFs noch gültig sind?
Rufen Sie Document.VerifySignatures() (eine async-Methode) auf und prüfen Sie die integrity- und signature-Felder jedes zurückgegebenen SignatureReport.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
Document.OpenFile() / Document.Open() | Ein Dokument öffnen, optional password- oder public-key-geschützt |
InvalidPasswordError | Wird ausgelöst, wenn ein Passwort fehlt oder falsch ist |
Document.Save() / Document.WriteTo() | Ein Dokument speichern, optional mit einer encrypt-Option |
Permissions | Wiederhergestellte Berechtigungs-Flags aus einem verschlüsselten Dokument |
Document.Certify() | Fügen Sie eine Zertifizierungs-(Autor-)Signatur mit einer DocMDP-Transformation hinzu |
Document.Sign() | Fügen Sie eine Genehmigungs-Signatur hinzu |
Document.VerifySignatures() | Überprüfen Sie jede Signatur im Dokument |
SignatureReport | Verifizierungsergebnis einer Signatur: name, integrity, signature |