X509_CHECK_HOST(3SSL)

الاسم
X509_check_host, X509_check_email, X509_check_ip, X509_check_ip_asc - مطابقة شهادة X.509

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

 int X509_check_host(X509 *, const char *name, size_t namelen,
                     unsigned int flags, char **peername);
 int X509_check_email(X509 *, const char *address, size_t addresslen,
                      unsigned int flags);
 int X509_check_ip(X509 *, const unsigned char *address, size_t addresslen,
                   unsigned int flags);
 int X509_check_ip_asc(X509 *, const char *address, unsigned int flags);

الوصف
تُستخدم دوال مطابقة الشهادة للتحقق مما إذا كانت الشهادة تطابق اسم مضيف معين، أو عنوان بريد إلكتروني، أو عنوان IP. يجب التحقق من صلاحية الشهادة ومستوى الثقة بها بوسائل أخرى.

X509_check_host() يتحقق مما إذا كان اسم بديل للموضوع (SAN) أو الاسم الشائع للموضوع (CN) في الشهادة يطابق اسم المضيف المحدد، والذي يجب ترميزه بصيغة الاسم المفضلة الموصوفة في القسم 3.5 من RFC 1034. مبدئيًا، تُدعم الأحرف البديلة وتطابق فقط التسمية الأقصى يسارًا؛ لكنها قد تطابق جزءًا من تلك التسمية ببادئة أو لاحقة صريحة. على سبيل المثال، مبدئيًا، اسم المضيف name "www.example.com" سيطابق شهادة بقيمة SAN أو CN مثل "*.example.com" أو "w*.example.com" أو "*w.example.com".

وفقًا للقسم 6.4.2 من RFC 6125، يجب تقديم قيم name التي تمثل أسماء نطاقات دولية بصيغة A-label. يجب أن تكون وسيطة namelen عدد المحارف في سلسلة الاسم أو صفرًا، وفي هذه الحالة يُحسب الطول باستخدام strlen(name). عندما يبدأ name بنقطة (مثل ".example.com")، ستطابقه شهادة صالحة لأي نطاق فرعي من name، (انظر أيضًا X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS أدناه).

عند مطابقة الشهادة، وإذا لم يكن peername NULL، يُخزن مؤشر لنسخة من SAN أو CN المطابق من شهادة النظير في العنوان المُمرر في peername. يتحمل التطبيق مسؤولية تحرير peername عبر OPENSSL_free() عندما لا يعود بحاجة إليه.

X509_check_email() يتحقق مما إذا كانت الشهادة تطابق عنوان البريد الإلكتروني address المحدد. صيغة صندوق البريد في RFC 822 مدعومة، ولا يُسمح بالتعليقات، ولا تُبذل أي محاولة لتطبيع المحارف المقتبسة. صيغة صندوق البريد في RFC 6531 مدعومة لعنوان SmtpUTF8Mailbox في subjectAltName وفقًا لـ RFC 8398، مع قيود مشابهة لصيغة RFC 822، ولا تُبذل أي محاولة للتحويل من A-label إلى U-label قبل المقارنة. يجب أن تكون وسيطة addresslen عدد المحارف في سلسلة العنوان أو صفرًا، وفي هذه الحالة يُحسب الطول باستخدام strlen(address).

X509_check_ip() يتحقق مما إذا كانت الشهادة تطابق عنوان IPv4 أو IPv6 محدد. مصفوفة address تكون بصيغة ثنائية، بترتيب بايتات الشبكة. الطول إما 4 (IPv4) أو 16 (IPv6). تُؤخذ في الاعتبار فقط العناوين المُعلَّمة صراحةً في الشهادات؛ تُتجاهل عناوين IP المخزنة في أسماء DNS والأسماء الشائعة. لا توجد حاليًا أي flags تؤثر على سلوك هذه الاستدعاء.

X509_check_ip_asc() مشابه، باستثناء أن سلسلة المحارف address المنتهية بـ NUL تُحوَّل أولاً إلى التمثيل الداخلي.

وسيطة flags عادةً ما تكون 0. يمكن أن تكون OR أحادي البت للأعلام:

X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT،
X509_CHECK_FLAG_NEVER_CHECK_SUBJECT،
X509_CHECK_FLAG_NO_WILDCARDS،
X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS،
X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS.
X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS.

العلم X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT يجعل الدالة تعتبر DN الموضوع حتى لو احتوت الشهادة على اسم بديل واحد على الأقل من النوع الصحيح (اسم DNS أو عنوان بريد إلكتروني حسب الاقتضاء)؛ المبدئي هو تجاهل DN الموضوع عندما يوجد اسم بديل واحد على الأقل مطابق.

العلم X509_CHECK_FLAG_NEVER_CHECK_SUBJECT يجعل الدالة لا تعتبر DN الموضوع أبدًا حتى لو لم تحتوِ الشهادة على أسماء بديلة من النوع الصحيح (اسم DNS أو عنوان بريد إلكتروني حسب الاقتضاء)؛ المبدئي هو استخدام DN الموضوع عندما لا توجد أسماء بديلة مطابقة. إذا حُدد كل من X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT وX509_CHECK_FLAG_NEVER_CHECK_SUBJECT، فإن الأخير له الأسبقية ولا يُفحص DN الموضوع للأسماء المطابقة.

إذا ضُبط، فإن X509_CHECK_FLAG_NO_WILDCARDS يعطل توسيع أحرف البدل؛ هذا ينطبق فقط على X509_check_host.

إذا ضُبط، فإن X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS يكبت الدعم لـ "*" كنمط بدل في التسميات التي لها بادئة أو لاحقة، مثل: "www*" أو "*www"؛ هذا ينطبق فقط على X509_check_host.

إذا ضُبط، فإن X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS يسمح لـ "*" التي تشكل التسمية الكاملة لاسم DNS (مثل "*.example.com") بمطابقة أكثر من تسمية واحدة في name؛ هذا العلم ينطبق فقط على X509_check_host.

إذا ضُبط، فإن X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS يقيد قيم name التي تبدأ بـ "."، والتي كانت ستطابق أي نطاق فرعي في شهادة النظير، لمطابقة النطاقات الفرعية التابعة المباشرة فقط. وهكذا، على سبيل المثال، مع ضبط هذا العلم، فإن name بقيمة ".example.com" ستطابق شهادة نظير باسم DNS "www.example.com"، لكنها لن تطابق شهادة نظير باسم DNS "www.sub.example.com"؛ هذا العلم ينطبق فقط على X509_check_host.

القيم المُرجعة
ترجع الدوال 1 للمطابقة الناجحة، 0 للمطابقة الفاشلة و -1 لخطأ داخلي: عادةً فشل تخصيص ذاكرة أو خطأ فك ترميز ASN.1.

يمكن لجميع الدوال أيضًا إرجاع -2 إذا كان الإدخال مشوهًا. على سبيل المثال، ترجع X509_check_host() -2 إذا كان name المقدم يحتوي على محارف NUL مضمنة.

ملاحظات
يُشجع التطبيقات على استخدام X509_VERIFY_PARAM_set1_host() بدلاً من استدعاء X509_check_host(3) صراحةً. قد تكون فحوصات اسم المضيف خارج النطاق مع استخدام شهادة DANE-EE(3)، وسيُكبت الفحوصات الداخلية حسب الاقتضاء عند تمكين دعم DANE.

انظر أيضًا
SSL_get_verify_result(3)، X509_VERIFY_PARAM_set1_host(3)، X509_VERIFY_PARAM_add1_host(3)، X509_VERIFY_PARAM_set1_email(3)، X509_VERIFY_PARAM_set1_ip(3)

التاريخ
أُضيفت هذه الدوال في OpenSSL 1.0.2.

حقوق النسخ
حقوق النشر 2012-2022 لمؤلفي مشروع 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.