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 オプションを受け付けます。パスワードベースの暗号化が一般的なケースです;ライブラリはまた、受信者証明書1つまたは複数への公開鍵暗号化もサポートしており、受信者の秘密鍵で再び開くことができます。

// 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[] を返します。署名ごとに 1 つのエントリです。

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 バンドル)を確認してください
承認署名は認証を無効にします認証する DocMDP 変換が許可しない権限で Sign() が呼び出されました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()文書内のすべての署名を検証する
SignatureReport1つの署名の検証結果: name, integrity, signature

参照

 日本語