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

참조

 한국어