.\" -*- coding: UTF-8 -*- .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .de IX .. .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .if n .ds AD l .\" .\" Required to disable full justification in groff 1.23.0. .\" ======================================================================== .\" .IX Title "X509_STORE_CTX_SET_VERIFY_CB 3ssl" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH X509_STORE_CTX_SET_VERIFY_CB 3ssl "7 أبريل 2026" 3.6.2 OpenSSL .if n .ad l .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .nh .SH الاسم X509_STORE_CTX_get_cleanup, X509_STORE_CTX_get_lookup_crls, X509_STORE_CTX_get_lookup_certs, X509_STORE_CTX_get_check_policy, X509_STORE_CTX_get_cert_crl, X509_STORE_CTX_get_check_crl, X509_STORE_CTX_get_get_crl, X509_STORE_CTX_set_get_crl, X509_STORE_CTX_get_check_revocation, X509_STORE_CTX_get_check_issued, X509_STORE_CTX_get_get_issuer, X509_STORE_CTX_get_verify_cb, X509_STORE_CTX_set_verify_cb, X509_STORE_CTX_verify_cb, X509_STORE_CTX_print_verify_cb, X509_STORE_CTX_set_current_reasons \&\- الحصول على مكونات X509_STORE_CTX وتعيينها، مثل رد الاتصال للتحقق. .SH موجز .IX Header موجز .Vb 1 \& #include \& \& typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); \& int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); \& \& X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); \& \& void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, \& X509_STORE_CTX_verify_cb verify_cb); \& \& X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); \& X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); \& X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); \& \& X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); \& \& void X509_STORE_CTX_set_get_crl(X509_STORE_CTX *ctx, \& X509_STORE_CTX_get_crl_fn get_crl); \& \& X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); \& X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); \& X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); \& X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); \& X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); \& X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); \& void X509_STORE_CTX_set_current_reasons(X509_STORE_CTX *ctx, \& unsigned int current_reasons); .Ve .SH الوصف .IX Header الوصف \&\fBX509_STORE_CTX_set_verify_cb()\fP تعيّن دالة استرجاع التحقق لـ \fBctx\fP إلى \&\fBverify_cb\fP مع استبدال أي دالة استرجاع موجودة. .PP يمكن استخدام دالة استرجاع التحقق لتخصيص عملية التحقق من الشهادة، على سبيل المثال عن طريق تجاوز شروط الخطأ أو تسجيل الأخطاء لأغراض التصحيح. .PP ومع ذلك، فإن دالة استرجاع التحقق \fBليست\fP أساسية وغالبًا ما تكون العملية المبدئية كافية. .PP يشير المعامل \fBok\fP إلى القيمة التي يجب أن تُرجعها دالة الاسترجاع للحفاظ على السلوك المبدئي. إذا كانت صفرًا، يُشار إلى حالة خطأ. إذا كانت 1، لم يحدث خطأ. إذا وُضعت العلامة \&\fBX509_V_FLAG_NOTIFY_POLICY\fP، فتُعيّن \fBok\fP إلى 2 للإشارة إلى اكتمال فحص السياسة. .PP المعامل \fBctx\fP لدالة الاسترجاع هو بنية \fBX509_STORE_CTX\fP التي تنفذ عملية التحقق. يمكن لدالة الاسترجاع فحص هذه البنية واستلام معلومات إضافية حول الخطأ، على سبيل المثال عن طريق استدعاء \fBX509_STORE_CTX_get_current_cert()\fP. يمكن تمرير بيانات تطبيق إضافية إلى دالة الاسترجاع عبر آلية \fBex_data\fP. .PP \&\fBX509_STORE_CTX_print_verify_cb()\fP هي دالة استرجاع تحقق، عندما يفشل التحقق من الشهادة، تُضيف إدخالاً إلى قائمة انتظار الأخطاء بالرمز \fBX509_R_CERTIFICATE_VERIFICATION_FAILED\fP مع تفاصيل تشخيصية، بما في ذلك الحقول الأكثر صلة بالشهادة الهدف التي فشل التحقق منها، وإذا كان مناسبًا، للشهادات غير الموثوقة والموثوقة المتاحة. .PP \&\fBX509_STORE_CTX_get_verify_cb()\fP تُرجع قيمة دالة الاسترجاع الحالية لـ \fBctx\fP المحدد. .PP \&\fBX509_STORE_CTX_get_get_issuer()\fP، \&\fBX509_STORE_CTX_get_check_issued()\fP، \fBX509_STORE_CTX_get_check_revocation()\fP، \&\fBX509_STORE_CTX_get_get_crl()\fP، \fBX509_STORE_CTX_get_check_crl()\fP، \&\fBX509_STORE_CTX_get_cert_crl()\fP، \fBX509_STORE_CTX_get_check_policy()\fP، \&\fBX509_STORE_CTX_get_lookup_certs()\fP، \fBX509_STORE_CTX_get_lookup_crls()\fP و \fBX509_STORE_CTX_get_cleanup()\fP تُرجع مؤشرات الدوال المخبأة من \fBX509_STORE\fP المقابل، يُرجى الاطلاع على \&\fBX509_STORE_set_verify\fP\|(3) لمزيد من المعلومات. .PP \&\fBX509_STORE_CTX_set_get_crl()\fP تعيّن الدالة للحصول على crl لشهادة معينة \fIx\fP. عند العثور عليها، يجب تعيين crl إلى \fI*crl\fP. يجب أن تُرجع هذه الدالة 0 عند الفشل و1 عند النجاح. \&\fIإذا لم تُوفّر دالة للحصول على المُصدِر، فستُستخدم الدالة المبدئية الداخلية بدلاً من ذلك.\fP .PP \&\fBX509_STORE_CTX_set_current_reasons()\fP تُستخدم بالتزامن مع X509_STORE_CTX_get_crl_fn. يجب أن تستخدم دالة الاسترجاع X509_STORE_CTX_get_crl_fn هذه الطريقة لتعيين سبب كون الشهادة غير صالحة. .SH تحذيرات .IX Header تحذيرات بشكل عام، يجب \fBألا\fP تُرجع دالة استرجاع التحقق 1 بشكل غير مشروط في جميع الظروف لأن هذا سيسمح بنجاح التحقق بغض النظر عن الخطأ. هذا يزيل فعليًا كل الأمان من التطبيق لأنه \fBأي\fP شهادة (بما في ذلك الشهادات المولدة غير الموثوقة) ستُقبل. .SH ملاحظات .IX Header ملاحظات يمكن تعيين دالة استرجاع التحقق وتوريثها من البنية الأصلية التي تنفذ العملية. في بعض الحالات (مثل التحقق من S/MIME)، تُنشأ بنية \&\fBX509_STORE_CTX\fP وتُدمر داخليًا، والطريقة الوحيدة لتعيين دالة استرجاع تحقق مخصصة هي عن طريق توريثها من \fBX509_STORE\fP المرتبط. .SH "القيم المُرجعة" .IX Header "القيم المُرجعة" \&\fBX509_STORE_CTX_set_verify_cb()\fP لا تُرجع قيمة. .SH أمثلة .IX Header أمثلة عملية دالة الاسترجاع المبدئية: .PP .Vb 3 \& int verify_callback(int ok, X509_STORE_CTX *ctx) { \& return ok; \& } .Ve .PP مثال بسيط، افترض أن شهادة في السلسلة منتهية الصلاحية ونرغب في الاستمرار بعد هذا الخطأ: .PP .Vb 7 \& int verify_callback(int ok, X509_STORE_CTX *ctx) { \& /* Tolerate certificate expiration */ \& if (X509_STORE_CTX_get_error(ctx) == X509_V_ERR_CERT_HAS_EXPIRED) \& return 1; \& /* Otherwise don\*(Aqt override */ \& return ok; \& } .Ve .PP مثال أكثر تعقيدًا، لا نرغب في الاستمرار بعد انتهاء صلاحية \fBأي\fP شهادة إلا في حالة محددة واحدة: .PP .Vb 4 \& int verify_callback(int ok, X509_STORE_CTX *ctx) \& { \& int err = X509_STORE_CTX_get_error(ctx); \& X509 *err_cert = X509_STORE_CTX_get_current_cert(ctx); \& \& if (err == X509_V_ERR_CERT_HAS_EXPIRED) { \& if (check_is_acceptable_expired_cert(err_cert) \& return 1; \& } \& return ok; \& } .Ve .PP دالة رد اتصال تسجيل كاملة الميزات. في هذه الحالة، يُفترض أن \fBbio_err\fP هو \fBBIO\fP تسجيل عام، وبديل ذلك هو تخزين BIO في \fBctx\fP باستخدام \&\fBex_data\fP. .PP .Vb 4 \& int verify_callback(int ok, X509_STORE_CTX *ctx) \& { \& X509 *err_cert; \& int err, depth; \& \& err_cert = X509_STORE_CTX_get_current_cert(ctx); \& err = X509_STORE_CTX_get_error(ctx); \& depth = X509_STORE_CTX_get_error_depth(ctx); \& \& BIO_printf(bio_err, "depth=%d ", depth); \& if (err_cert) { \& X509_NAME_print_ex(bio_err, X509_get_subject_name(err_cert), \& 0, XN_FLAG_ONELINE); \& BIO_puts(bio_err, "\en"); \& } \& else \& BIO_puts(bio_err, "\en"); \& if (!ok) \& BIO_printf(bio_err, "verify error:num=%d:%s\en", err, \& X509_verify_cert_error_string(err)); \& switch (err) { \& case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: \& BIO_puts(bio_err, "issuer= "); \& X509_NAME_print_ex(bio_err, X509_get_issuer_name(err_cert), \& 0, XN_FLAG_ONELINE); \& BIO_puts(bio_err, "\en"); \& break; \& case X509_V_ERR_CERT_NOT_YET_VALID: \& case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: \& BIO_printf(bio_err, "notBefore="); \& ASN1_TIME_print(bio_err, X509_get_notBefore(err_cert)); \& BIO_printf(bio_err, "\en"); \& break; \& case X509_V_ERR_CERT_HAS_EXPIRED: \& case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: \& BIO_printf(bio_err, "notAfter="); \& ASN1_TIME_print(bio_err, X509_get_notAfter(err_cert)); \& BIO_printf(bio_err, "\en"); \& break; \& case X509_V_ERR_NO_EXPLICIT_POLICY: \& policies_print(bio_err, ctx); \& break; \& } \& if (err == X509_V_OK && ok == 2) \& /* print out policies */ \& \& BIO_printf(bio_err, "verify return:%d\en", ok); \& return(ok); \& } .Ve .SH "انظر أيضًا" .IX Header "انظر أيضًا" \&\fBX509_STORE_CTX_get_error\fP\|(3) \&\fBX509_STORE_set_verify_cb_func\fP\|(3) \&\fBX509_STORE_CTX_get_ex_new_index\fP\|(3) .SH التاريخ .IX Header التاريخ الدوال \&\fBX509_STORE_CTX_get_get_issuer()\fP, \&\fBX509_STORE_CTX_get_check_issued()\fP, \fBX509_STORE_CTX_get_check_revocation()\fP, \&\fBX509_STORE_CTX_get_get_crl()\fP, \fBX509_STORE_CTX_get_check_crl()\fP, \&\fBX509_STORE_CTX_get_cert_crl()\fP, \fBX509_STORE_CTX_get_check_policy()\fP, \&\fBX509_STORE_CTX_get_lookup_certs()\fP, \fBX509_STORE_CTX_get_lookup_crls()\fP و \fBX509_STORE_CTX_get_cleanup()\fP أُضيفت في OpenSSL 1.1.0. .PP \&\fBX509_STORE_CTX_print_verify_cb()\fP أُضيفت في OpenSSL 3.0. .SH "حقوق النسخ" .IX Header "حقوق النسخ" حقوق النشر 2009\-2023 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة. .PP مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط . .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .