Scroll to navigation

PKCS7_VERIFY(3SSL) OpenSSL PKCS7_VERIFY(3SSL)

الاسم

PKCS7_verify, PKCS7_get0_signers - التحقق من بنية PKCS#7 signedData

موجز

 #include <openssl/pkcs7.h>
 int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
                  BIO *indata, BIO *out, int flags);
 STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags);

الوصف

PKCS7_verify() مشابهة جدًا لـ CMS_verify(3). تتحقق من بنية PKCS#7 signedData المُعطاة في p7. يشير المُعامل الاختياري certs إلى مجموعة من الشهادات يُبحث فيها عن شهادات الموقّع. ويُستخدم أيضًا كمصدر لشهادات CA الوسيطة غير الموثوقة لبناء السلسلة. قد يحتوي p7 على شهادات CA وسيطة إضافية غير موثوقة قد تُستخدم لبناء السلسلة بالإضافة إلى CRLs التي قد تُستخدم للتحقق من صحة الشهادة. قد يكون store NULL أو يشير إلى مخزن الشهادات الموثوقة لاستخدامه في التحقق من السلسلة. يشير indata إلى البيانات المُوقّعة إذا كان المحتوى منفصلاً عن p7. وإلا فيجب أن يكون indata NULL، وعندها يجب أن تكون البيانات المُوقّعة في p7. يُكتب المحتوى إلى BIO out ما لم يكن NULL. flags هي مجموعة اختيارية من الأعلام، يمكن استخدامها لتعديل العملية.

PKCS7_get0_signers() تسترجع شهادات الموقّع من p7، ولا تتحقق لا من صحتها أو من صحة أي توقيعات. للمُعاملات certs و flags نفس المعاني كما في PKCS7_verify().

عملية التحقق

عادةً ما تسير عملية التحقق كما يلي.

في البداية تُجرى بعض الفحوصات المنطقية على p7. يجب أن يكون نوع p7 هو SignedData. يجب أن يكون هناك توقيع واحد على الأقل على البيانات، وإذا كان المحتوى منفصلاً فلا يمكن أن يكون indata NULL. إذا لم يكن المحتوى منفصلاً وكان indata ليس NULL، فإن البنية تحتوي على محتوى مضمن وخارجي معًا. لمعالجة هذا كخطأ، استخدم العلامة PKCS7_NO_DUAL_CONTENT. السلوك المبدئي يسمح بذلك، للتوافق مع الإصدارات الأقدم من OpenSSL.

تُبذل محاولة لتحديد موقع جميع شهادات الموقّع، بالبحث أولاً في المُعامل certs (إذا لم يكن NULL). ثم يُبحث عنها في أي شهادات موجودة في بنية p7 ما لم يُعيّن PKCS7_NOINTERN. إذا تعذر تحديد موقع أي من شهادات الموقّع، تفشل العملية.

يُتحقق من سلسلة كل شهادة موقّع باستخدام غرض smimesign وباستخدام مخزن الشهادات الموثوقة store إذا تم توفيره. تُستخدم أي شهادات داخلية في الرسالة، والتي قد أُضيفت باستخدام PKCS7_add_certificate(3)، كشهادات CA غير موثوقة ما لم يُعيّن PKCS7_NOCHAIN. إذا كان فحص CRL مُفعّلاً في store ولم يُعيّن PKCS7_NOCRL، تُستخدم أي CRLs داخلية، والتي قد أُضيفت باستخدام PKCS7_add_crl(3)، بالإضافة إلى محاولة البحث عنها في store. إذا لم يكن store NULL وفشل أي تحقق من السلسلة، يُرجع رمز خطأ.

أخيرًا يُقرَأ المحتوى الموقع (ويُكتب في out ما لم يكن NULL) ويُتَحَقَّق من التوقيع.

إذا تُحُقِّقَ من جميع التوقيعات بشكل صحيح، تكون الدالة ناجحة.

يمكن تمرير أي من الأعلام التالية (مجمعة بـ OR) في المعامل flags لتغيير سلوك التحقق المبدئي. فقط العلامة PKCS7_NOINTERN ذات معنى لـ PKCS7_get0_signers().

إذا عُيّن PKCS7_NOINTERN، لا يُبحث عن الشهادات في الرسالة نفسها عند تحديد موقع شهادات الموقّع. هذا يعني أن جميع شهادات الموقّع يجب أن تكون في المُعامل certs.

إذا تم تعيين PKCS7_NOCRL وكان فحص CRL مفعلاً في store، تُتجاهل أي CRLs في الرسالة نفسها.

إذا تم تعيين العلامة PKCS7_TEXT، تُحذف رؤوس MIME من النوع "text/plain" من المحتوى. إذا لم يكن المحتوى من النوع "text/plain"، يُعاد خطأ.

إذا عُيّن PKCS7_NOVERIFY، لا يُتحقق من سلسلة شهادات الموقّع.

إذا عُيّن PKCS7_NOCHAIN، لا تُستخدم الشهادات الموجودة في الرسالة كشهادات CA غير موثوقة. هذا يعني أن سلسلة التحقق بأكملها (باستثناء شهادات الموقّع) يجب أن تكون موجودة في المخزن الموثوق.

إذا تم تعيين PKCS7_NOSIGS، لا تُفحص التوقيعات على البيانات.

ملاحظات

أحد تطبيقات PKCS7_NOINTERN هو قبول الرسائل المُوقّعة فقط من قبل عدد صغير من الشهادات. تُمرّر الشهادات المقبولة في المُعامل certs. في هذه الحالة، إذا لم تكن شهادة الموقّع واحدة من الشهادات المُقدّمة في certs، فسيفشل التحقق لأنه لا يمكن العثور على الموقّع.

يجب توخي الحذر عند تعديل سلوك التحقق المبدئي، على سبيل المثال تعيين "PKCS7_NOVERIFY|PKCS7_NOSIGS" سيعطل تمامًا جميع عمليات التحقق وسيُعتبر أي رسالة موقعة صالحة. هذه التركيبة مفيدة مع ذلك إذا كان المرء يرغب فقط في كتابة المحتوى إلى out ولا تُعتبر صحته مهمة.

يُفترض إجراء التحقق من السلسلة باستخدام وقت التوقيع بدلاً من الوقت الحالي. ومع ذلك، وبما أن وقت التوقيع يقدمه الموقع، فلا يمكن الوثوق به دون أدلة إضافية (مثل طابع زمني موثوق).

القيم المُرجعة

PKCS7_verify() تُرجع 1 للتحقق الناجح و0 إذا حدث خطأ.

PKCS7_get0_signers() تُرجع جميع الموقعين أو NULL إذا حدث خطأ.

يمكن الحصول على الخطأ من ERR_get_error(3).

العلل

لا يُبحث مخزن الشهادات الموثوقة عن شهادات الموقّع. يرجع هذا أساسًا إلى قصور وظائف X509_STORE الحالية.

غياب المعالجة بمرور واحد يعني وجوب الاحتفاظ بجميع المحتوى الموقع في الذاكرة إذا لم يكن منفصلاً.

انظر أيضًا

CMS_verify(3), PKCS7_add_certificate(3), PKCS7_add_crl(3), ERR_get_error(3), PKCS7_sign(3)

حقوق النسخ

حقوق النشر 2002-2024 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة.

مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط <https://www.openssl.org/source/license.html>.

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

7 أبريل 2026 3.6.2