X509_VERIFY_CERT(3SSL)

الاسم
X509_build_chain، X509_verify_cert، X509_STORE_CTX_verify - بناء والتحقق من سلسلة شهادات X509

موجز
 #include <openssl/x509_vfy.h>

 STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs,
                                  X509_STORE *store, int with_self_signed,
                                  OSSL_LIB_CTX *libctx, const char *propq);
 int X509_verify_cert(X509_STORE_CTX *ctx);
 int X509_STORE_CTX_verify(X509_STORE_CTX *ctx);

الوصف
X509_build_chain() تبني سلسلة شهادات تبدأ من target باستخدام القائمة الاختيارية لشهادات CA الوسيطة certs. إذا كان store NULL فإنها تبني السلسلة إلى أقصى حد ممكن، متجاهلة الأخطاء. وإلا يجب أن تصل السلسلة إلى نقطة ثقة موجودة في store. تستخدم داخليًا بنية X509_STORE_CTX مرتبطة بسياق المكتبة libctx وسلسلة استعلام الخاصية propq، وكلاهما قد يكون NULL. في حالة وجود أكثر من احتمال للسلسلة، يُؤخذ احتمال واحد فقط.

عند النجاح تُعيد مؤشرًا إلى رصة جديدة من الشهادات (ذات العدد المرجعي المرفوع) تبدأ بـ target ويتبعها جميع الشهادات الوسيطة المتاحة. تُضمن نقطة ثقة موقعة ذاتيًا فقط إذا كان target هو نقطة الثقة لـ with_self_signed يساوي 1. إذا أُعيدت رصة غير NULL، يكون المستدعي مسؤولًا عن تحريرها.

تحاول الدالة X509_verify_cert() اكتشاف والتحقق من سلسلة شهادات بناءً على المعاملات في ctx. يمكن بناء سياق التحقق، من النوع X509_STORE_CTX، باستخدام X509_STORE_CTX_new(3) و X509_STORE_CTX_init(3). يتضمن عادةً شهادة هدف للتحقق منها، مجموعة من الشهادات تعمل كنقاط ثقة، قائمة من الشهادات غير الموثوقة التي قد تكون مفيدة لبناء السلسلة، أعلام مثل X509_V_FLAG_X509_STRICT، ومكونات اختيارية أخرى متنوعة مثل دالة رد اتصال تسمح بتخصيص نتيجة التحقق. يُحتوى وصف كامل لعملية التحقق من الشهادة في صفحة الدليل openssl-verification-options(1).

نادرًا ما تستدعي التطبيقات هذه الدالة مباشرة ولكنها تُستخدم بواسطة OpenSSL داخليًا للتحقق من الشهادة، في كل من كود S/MIME و SSL/TLS.

قد تحدث قيمة إرجاع سالبة من X509_verify_cert() إذا استُدعيت بشكل غير صحيح، مثل عدم تعيين شهادة في ctx، أو عند استدعائها مرتين متتاليتين دون إعادة تهيئة ctx للاستدعاء الثاني. يمكن أن تحدث قيمة إرجاع سالبة أيضًا بسبب مشاكل في الموارد الداخلية أو بسبب اكتشاف عدم اتساق داخلي. يجب على التطبيقات تفسير أي قيمة إرجاع <= 0 كخطأ.

تتصرف X509_STORE_CTX_verify() مثل X509_verify_cert() باستثناء أن شهادة هدفها هي العنصر الأول من قائمة الشهادات غير الموثوقة في ctx ما لم تُعين شهادة هدف صراحةً.

عندما يكون هدف التحقق مفتاحًا عامًا خامًا، بدلاً من شهادة، تتحقق كلتا الدالتين من المفتاح العام الخام الهدف. في هذه الحالة، يقل عدد الفحوصات الممكنة بشكل كبير. يمكن المصادقة على المفتاح العام الخام فقط عبر سجلات DANE TLSA، إما المُركبة محليًا أو التي حصل عليها التطبيق من DNS. يمكن إضافة سجلات DANE TLSA للمفتاح العام الخام عبر SSL_add_expected_rpk(3) أو SSL_dane_tlsa_add(3).

القيم المُرجعة
X509_build_chain() تُعيد NULL عند الخطأ، وإلا رصة من الشهادات.

كل من X509_verify_cert() و X509_STORE_CTX_verify() تُعيدان 1 إذا أمكن بناء سلسلة كاملة والتحقق منها، وإلا تُعيدان 0، وفي ظروف استثنائية (مثل فشل malloc والأخطاء الداخلية) يمكنهما أيضًا إعادة كود سالب.

إذا أمكن بناء سلسلة كاملة والتحقق منها، تُعيد كلتا الدالتين 1. إذا كان يجب رفض الشهادة بناءً على البيانات المتاحة أو أي بيانات حالة شهادة مطلوبة غير متاحة، تُعيدان 0. إذا لم يكن هناك إجابة محددة ممكنة، تُعيدان عادةً كودًا سالبًا.

عند الخطأ أو الفشل، يمكن الحصول على معلومات خطأ إضافية بفحص ctx باستخدام، على سبيل المثال، X509_STORE_CTX_get_error(3). حتى إذا أشار التحقق إلى النجاح، قد يختلف كود الخطأ المخزن عن X509_V_OK، على الأرجح لأن دالة رد اتصال التحقق قد تنازلت عن الخطأ.

انظر أيضًا
SSL_add_expected_rpk(3)، SSL_CTX_dane_enable(3)، SSL_dane_tlsa_add(3)، X509_STORE_CTX_new(3)، X509_STORE_CTX_init(3)، X509_STORE_CTX_init_rpk(3)، X509_STORE_CTX_get_error(3)

التاريخ
X509_build_chain() و X509_STORE_CTX_verify() أُضيفتا في OpenSSL 3.0.

حقوق النسخ
حقوق النشر 2009-2023 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة.

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

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

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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