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() | 文書内のすべての署名を検証する |
SignatureReport | 1つの署名の検証結果: name, integrity, signature |