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