تخطَّ إلى المحتوى

توقيع ملف PDF بتوقيع PAdES أساسي (منقولة)

أصبح شرح التوقيع الذي كان في هذه الصفحة متجاوزًا الآن. استخدم الوصفة المرجعية بدلاً منه:

توقيع ملف ⁨PDF⁩ بمستوى ⁨PAdES B-B⁩، ثم ترقيته إلى ⁨PAdES B-T⁩

سبب تغيير هذه الصفحة (تصويب)

قسم بعنوان «سبب تغيير هذه الصفحة (تصويب)»

ذكرت نسخة سابقة من هذه الصفحة أن المسار عالي المستوى Document::setSignature()save() غير موصول وأنه يطرح NotImplementedException. لم يعد ذلك صحيحًا. فالمسار عالي المستوى يكتب الآن توقيعًا فعليًا.

يكتب Document::setSignature($cert, SignatureLevel::PAdES_B_B)->save() (وما يكافئه من output() / getPdfData()) حقل /Sig يشتمل على /ByteRange وكائن SignedData لـ ⁨Cryptographic Message Syntax⁩ ‏(⁨CMS⁩) مرمَّز بقواعد الترميز المميز ⁨Distinguished Encoding Rules⁩ ‏(⁨DER⁩)، وذلك في مدخل Contents ضمن قاموس التوقيع. وهذه هي البنية التي يحددها ⁨ISO 32000-2⁩ §12.8 لـ SubFilter الخاص بـ ETSI.CAdES.detached. وتكون النتيجة قابلة للتحقق عبر ⁨CMS⁩؛ إذ يستطيع أيُّ متحقِّق قياسي من نوع ⁨CMS/PKCS⁩#7 ‏(⁨Public-Key Cryptography Standards⁩ #7) تحليلها والتحقق منها.

  • ⁨B-B⁩ — وهو مستوى ⁨Core⁩ — يُنتَج مباشرة عبر هذا المسار.
  • ⁨B-T⁩ يضيف ⁨signature-time-stamp⁩ واحدًا وفق ⁨RFC 3161⁩ عند تمرير TsaClient في الاستدعاء نفسه.
  • ⁨B-LT⁩ / ⁨B-LTA⁩ يمكن الوصول إليهما عبر المسار نفسه عالي المستوى (setSignature($cert, SignatureLevel::PAdES_B_LTA, $tsaClient)->save()) عند تثبيت حزمتي ⁨Pro⁩ و ⁨Enterprise⁩ معًا؛ ومن دونهما يفشل الاستدعاء فشلاً آمنًا بدلاً من كتابة مراجعة طويلة الأمد جزئية. كما تفشل المستندات المشفَّرة فشلاً آمنًا مع ⁨B-LT/B-LTA.⁩

لا يزال المسار الأدنى مستوى NextPDF\Security\Signature\DigitalSigner مدعومًا. وتشرحه الوصفة المرجعية أدناه شرحًا متكاملاً من البداية إلى النهاية. أما المسار عالي المستوى فليس إلا غلافًا تيسيريًا رقيقًا فوق محرك التوقيع نفسه. وتختبر مجموعة اختبارات التكامل كلا المسارين وتُنتج كائن ⁨CMS⁩ فعليًا قابلاً للتحليل.

تنبيه ⁨U-1⁩ (نطاق الادعاء). تعني عبارة “قابل للتحقق عبر ⁨CMS⁩” أن الكائن المُنتَج هو كائن SignedData سليم البنية من نوع ⁨CMS⁩ وفق ⁨RFC 5652⁩ و⁨ISO 32000-2⁩ §12.8. وهي ليست تأكيداً على المطابقة لملف التعريف الأساسي في ⁨ETSI EN 319 142-1⁩ أو على الصلاحية القانونية. والجزء الخاص بالمستويات الأساسية من ذلك المعيار غير مُدرَج في مجموعة التحقق؛ أما متطلب signature-time-stamp في ⁨B-T⁩ فقد جرى التحقق منه إزاء ⁨ETSI EN 319 122-1⁩ §5.3 بالاستناد إلى ⁨RFC 3161⁩ و⁨RFC 5652⁩ و⁨RFC 5816⁩ و ⁨ISO⁩ 32000-2 §12.8. ⁨B-LT/B-LTA⁩ يُنتجان بنية التحقق طويل الأمد (قاموس ⁨DSS⁩ إضافةً إلى مراجعة ⁨DocTimeStamp⁩)؛ ولكنهما لا يوصفان بأنهما مختبَران للمطابقة لملف التعريف. يحدد المطابقة، إلى جانب الصلاحية القانونية، متحقِّق مستقل.

تظل الحقائق البنيوية التي أكدتها الصفحة القديمة بشأن المُخرَج المخزَّن على القرص صحيحة. وتعيد الوصفة البديلة عرضها مدعومةً بالأدلة:

  • تُخزَّن قيمة التوقيع في مدخل Contents في قاموس التوقيع (⁨ISO 32000-2⁩ §12.8.1).
  • يُحسَب الملخَّص على ByteRange ويستثني قيمة التوقيع نفسها (⁨ISO 32000-2⁩ §12.8.1).

لا تؤكد هذه الصفحة أن أي توقيع ناتج صالح قانونيًا. فالصلاحية القانونية تعتمد على الشهادة ومرساة الثقة الخاصة بها وسياسة المتحقِّق. ويقع ذلك كله خارج نطاق هذه المكتبة.