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);
}팁 및 모범 사례
- 신뢰할 수 없는 입력을 열 때, 보다 일반적인 catch-all 보다 먼저
InvalidPasswordError을(를) 구체적으로 잡아내어, 잘못된 비밀번호와 손상된 파일에 대해 다르게 대응할 수 있도록 합니다. Sign()호출보다 먼저Certify()을(를) 호출하십시오 — 인증 서명은 이후 승인 서명이 겹쳐지는 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 변환에서 허용하지 않는 권한으로 호출되었습니다 | Certify()에 permissions 값을 설정하십시오(예: 'form-fill'). 이후 서명자가 수행할 변경을 충분히 포괄하도록 넓게 설정합니다 |
VerifySignatures()가 무결성 검사 실패를 보고합니다 | 서명된 바이트가 서명 후에 수정되었으며, 서명이 적용되는 증분 업데이트 범위 밖에 있습니다 | 추가 편집이 끝난 후 문서를 다시 서명하십시오 |
FAQ
Sign와 Certify의 차이점은 무엇인가요?
Certify()은 첫 번째 인증 서명을 추가하고 ( DocMDP 변환을 통해) 이후 허용되는 변경 사항을 선언합니다. Sign()은 일반 승인 서명을 추가하며, 이전에 있던 것 위에 순차적으로 추가됩니다.
비밀번호로 보호된 PDF를 여는 방법은?
{ password: '...' }을 Document.OpenFile()이나 Document.Open()에 전달하고, 비밀번호가 틀릴 가능성이 있으면 InvalidPasswordError를 잡습니다.
이 라이브러리가 PDF 권한 플래그를 강제합니까?
아니요. Document.Open()은(는) 암호화된 문서에서 Permissions 플래그를 복구하여 검사할 수 있게 해 주지만, 열려 있는 문서에 대해 코드가 할 수 있는 일을 자체적으로 제한하지는 않습니다.
서명된 PDF의 서명이 아직 유효한지 어떻게 확인하나요?
Document.VerifySignatures()를 호출하고 (async 메서드) 반환된 각 SignatureReport의 integrity 및 signature 필드를 검사하십시오.
API Reference 요약
| 클래스/메서드 | 설명 |
|---|---|
Document.OpenFile() / Document.Open() | 문서를 열고, 선택적으로 비밀번호 또는 공개키로 보호할 수 있습니다 |
InvalidPasswordError | 비밀번호가 없거나 잘못된 경우에 발생합니다 |
Document.Save() / Document.WriteTo() | 문서를 저장하고, 선택적으로 encrypt 옵션을 사용할 수 있습니다 |
Permissions | 암호화된 문서에서 권한 플래그를 복구함 |
Document.Certify() | 인증(작성자) 서명을 DocMDP 변환으로 추가 |
Document.Sign() | 승인 서명을 추가 |
Document.VerifySignatures() | 문서의 모든 서명을 검증 |
SignatureReport | 하나의 서명 검증 결과: name, integrity, signature |