Security
Security
Ця сторінка охоплює паролі, шифрування та цифрові підписи. Document.OpenFile() / Document.Open() приймають пароль для відкриття захищеного документа, Document.Save() приймає параметр encrypt для захисту, а Document.Sign() / Document.Certify() / Document.VerifySignatures() додають і перевіряють цифрові підписи.
Відкриття та розшифрування документів, захищених паролем
Передайте { password: '...' } у Document.OpenFile() або Document.Open(), щоб відкрити документ, захищений паролем користувача. Якщо пароль відсутній або неправильний, виклик генерує 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;
}Шифрування під час збереження
Document.Save() (і Document.WriteTo()) приймають параметр encrypt. Шифрування на основі пароля є поширеним випадком; бібліотека також підтримує шифрування за допомогою відкритого ключа для одного або декількох сертифікатів одержувачів, які потім відкриваються за допомогою приватного ключа одержувача.
// 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)
Підписання та сертифікація
Document.Certify() додає сертифікаційний (авторський) підпис, що містить DocMDP трансформацію, яка визначає, які подальші зміни дозволені; Document.Sign() додає ще один звичайний підпис затвердження, який можна поступово додавати зверху. Обидва приймають підписувача { certificate, privateKey } і об’єкт параметрів (reason, location, name, fieldName і — для 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');Перевірка підписів
Document.VerifySignatures() перевіряє кожен підпис у документі: він повторно обчислює кожен /ByteRange дайджест, перевіряє відокремлений CMS і повідомляє, що змінилося після кожного підпису. Він повертає SignatureReport[], по одному запису на підпис.
const reports = await Document.OpenFile('signed.pdf').VerifySignatures();
for (const r of reports) {
console.log(r.name, 'integrity:', r.integrity, 'signature:', r.signature);
}Поради та найкращі практики
- Спочатку ловіть
InvalidPasswordErrorокремо, перед загальним обробником, під час відкриття недостовірного вводу, щоб мати можливість реагувати по-різному на неправильний пароль і на пошкоджений файл. - Викликайте
Certify()перед будь-якими викликамиSign()— сертифікаційний підпис встановлює DocMDP дозволи, на які потім накладаються підписи затвердження. Document.Open()повертає відновленіPermissionsпісля розшифрування за допомогою відкритого ключа, але бібліотека не примушує їх застосовувати — розглядайте їх як інформативні.VerifySignatures()єasync—awaitйого (або обробіть поверненеPromise) перед читанням масиву звітів.
Типові проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
Document.OpenFile() / Document.Open() викидає InvalidPasswordError | Документ захищений паролем, і не було надано пароль або був вказаний неправильний | Передайте { password: '...' } до Document.OpenFile() / Document.Open() |
| Розшифрування відкритим ключем не вдається | Було передано неправильний приватний ключ або сертифікат, або ж жоден з них не відповідає жодному запису recipients, використаному під час шифрування | Переконайтеся, що recipient параметр privateKey / certificate (або пакет PKCS#12) відповідає одному з оригінальних отримувачів |
| Підпис затвердження анулює сертифікацію | Sign() було викликано з дозволами, які не допускає сертифікуючий DocMDP трансформ | Встановіть значення permissions у Certify() (наприклад, 'form-fill'), достатньо широке для змін, які пізніше внесуть підписанти |
VerifySignatures() повідомляє про пошкоджену перевірку цілісності | Підписані байти були змінені після підпису, поза інкрементальним оновленням, яке охоплює підпис | Підпишіть документ заново після будь-яких подальших змін |
FAQ
У чому різниця між Sign і Certify?
Certify() додає перший, сертифікаційний підпис і оголошує (через DocMDP трансформацію), які подальші зміни дозволені. Sign() додає звичайний підпис затвердження, який інкрементно додається поверх усього, що було раніше.
Як відкрити PDF, захищений паролем?
Передайте { password: '...' } у Document.OpenFile() або Document.Open() і зловіть InvalidPasswordError, якщо пароль може бути неправильним.
Чи ця бібліотека застосовує прапорці дозволів PDF?
Ні. Document.Open() відновлює Permissions прапорці з зашифрованого документа, щоб ви могли їх переглянути, але сам по собі не обмежує, що ваш код може робити з відкритим документом.
Як перевірити, чи підписи підписаного PDF все ще дійсні?
Викличте Document.VerifySignatures() (метод async) і перевірте поля integrity та signature у кожного поверненого SignatureReport.
API Reference Підсумок
| Клас/Метод | Опис |
|---|---|
Document.OpenFile() / Document.Open() | Відкрити документ, при необхідності захищений паролем або публічним ключем |
InvalidPasswordError | Викидається, коли пароль відсутній або неправильний |
Document.Save() / Document.WriteTo() | Зберегти документ, за потреби з опцією encrypt |
Permissions | Відновлені прапори дозволів з зашифрованого документа |
Document.Certify() | Додайте підпис сертифікації (автора) з трансформацією DocMDP |
Document.Sign() | Додайте підпис затвердження |
Document.VerifySignatures() | Перевірте кожен підпис у документі |
SignatureReport | Результат перевірки одного підпису: name, integrity, signature |