.\" -*- 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 "SSL_CTX_SET_TLSEXT_TICKET_KEY_CB 3ssl" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SSL_CTX_SET_TLSEXT_TICKET_KEY_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 الاسم SSL_CTX_set_tlsext_ticket_key_evp_cb, SSL_CTX_set_tlsext_ticket_key_cb \&\- تعيين دالة استدعاء لمعالجة تذاكر الجلسة .SH موجز .IX Header موجز .Vb 1 \& #include \& \& int SSL_CTX_set_tlsext_ticket_key_evp_cb(SSL_CTX sslctx, \& int (*cb)(SSL *s, unsigned char key_name[16], \& unsigned char iv[EVP_MAX_IV_LENGTH], \& EVP_CIPHER_CTX *ctx, EVP_MAC_CTX *hctx, int enc)); .Ve .PP الدالة التالية أصبحت مهجورة منذ OpenSSL 3.0، ويمكن إخفاؤها تمامًا عبر تعريف \fBOPENSSL_API_COMPAT\fP بقيمة إصدار مناسبة، انظر \fBopenssl_user_macros\fP\|(7): .PP .Vb 4 \& int SSL_CTX_set_tlsext_ticket_key_cb(SSL_CTX sslctx, \& int (*cb)(SSL *s, unsigned char key_name[16], \& unsigned char iv[EVP_MAX_IV_LENGTH], \& EVP_CIPHER_CTX *ctx, HMAC_CTX *hctx, int enc)); .Ve .SH الوصف .IX Header الوصف \&\fBSSL_CTX_set_tlsext_ticket_key_evp_cb()\fP تعيّن دالة استدعاء \fIcb\fP لمعالجة تذاكر الجلسة لسياق SSL \fIsslctx\fP. تذاكر الجلسة، المُعرَّفة في RFC5077، تُوفّر قدرة محسّنة على استئناف الجلسة حيث لا يُطلب من تطبيق الخادم الحفاظ على حالة لكل جلسة. ينطبق هذا فقط على TLS ولا يوجد تطبيق SSLv3. .PP دالة الاستدعاء \fIcb\fP ستُستدعى لكل جلسة TLS يبدأها العميل عند تقديم امتداد تذكرة الجلسة في رسالة الترحيب TLS. تقع على عاتق هذه الدالة مسؤولية إنشاء أو استرجاع المعاملات التعمية والحفاظ على حالتها. .PP مكتبة OpenSSL تستخدم دالة الاستدعاء الخاصة بك للمساعدة في تنفيذ حالة بناء تذكرة TLS شائعة وفقًا للقسم 4 من RFC5077 بحيث لا تكون حالة كل جلسة ضرورية وتحتاج مجموعة صغيرة من المتغيرات التعمية إلى الصيانة بواسطة تطبيق دالة الاستدعاء. .PP لإعادة استخدام جلسة، يجب على عميل TLS إرسال امتداد تذكرة الجلسة إلى الخادم. يجب على العميل إرسال تذكرة جلسة واحدة بالضبط. الخادم، من خلال دالة الاستدعاء، إما يوافق على إعادة استخدام معلومات تذكرة الجلسة أو يبدأ مصافحة TLS كاملة لإنشاء تذكرة جلسة جديدة. .PP قبل بدء دالة الاستدعاء، تمت تهيئة \fIctx\fP و \fIhctx\fP باستخدام \fBEVP_CIPHER_CTX_reset\fP\|(3) و \fBEVP_MAC_CTX_new\fP\|(3) على التوالي. .PP لتذاكر الجلسات الجديدة، عندما لا يقدم العميل تذكرة جلسة، أو فشلت محاولة استرجاع التذكرة، أو تمت الإشارة إلى خيار التجديد، ستُستدعى دالة الاستدعاء مع \fIenc\fP مساويًا لـ 1. تتوقع مكتبة OpenSSL أن الدالة ستُعيِّن \fIname\fP عشوائيًا، وتهيئ \&\fIiv\fP، وتُعيِّن سياق المُعمِّي \fIctx\fP وسياق التجزئة \fIhctx\fP. .PP \fIname\fP طوله 16 حرفًا ويُستخدم كمُعرِّف للمفتاح. .PP طول \fIiv\fP هو طول IV للمُعمِّي المقابل. الحد الأقصى لطول IV هو \fBEVP_MAX_IV_LENGTH\fP بايت مُعرَّف في \fI\fP. .PP متجه التهيئة \fIiv\fP يجب أن يكون قيمة عشوائية. سياق المُعمِّي \&\fIctx\fP يجب أن يستخدم متجه التهيئة \fIiv\fP. يمكن تعيين سياق المُعمِّي باستخدام \fBEVP_EncryptInit_ex\fP\|(3). يمكن تعيين سياق HMAC والملخص باستخدام \&\fBEVP_MAC_CTX_set_params\fP\|(3) مع المعاملين \fBOSSL_MAC_PARAM_KEY\fP و \&\fBOSSL_MAC_PARAM_DIGEST\fP على التوالي. .PP عندما يقدم العميل تذكرة جلسة، ستُستدعى دالة الاستدعاء مع \fIenc\fP مُعيَّنًا إلى 0 للإشارة إلى أن دالة \fIcb\fP يجب أن تسترجع مجموعة من المعاملات. في هذه الحالة، تم بالفعل تحليل \fIname\fP و \fIiv\fP من تذكرة الجلسة. تتوقع مكتبة OpenSSL أن \fIname\fP سيُستخدم لاسترجاع معاملات تعمية وأن السياق التعمي \&\fIctx\fP سيُعيَّن مع المعاملات المسترجعة ومتجه التهيئة \&\fIiv\fP باستخدام دالة مثل \fBEVP_DecryptInit_ex\fP\|(3). مادة المفتاح والملخص لـ \fIhctx\fP يحتاجان إلى التعيين باستخدام \fBEVP_MAC_CTX_set_params\fP\|(3) مع المعاملين \&\fBOSSL_MAC_PARAM_KEY\fP و \fBOSSL_MAC_PARAM_DIGEST\fP على التوالي. .PP إذا كان \fIname\fP لا يزال صالحًا ولكن تجديد التذكرة مطلوب، يجب على دالة الاستدعاء إرجاع 2. ستستدعي المكتبة دالة الاستدعاء مرة أخرى مع وسيطة enc مساوية لـ 1 لتعيين التذكرة الجديدة. .PP قيمة الإرجاع لدالة \fIcb\fP تُستخدم بواسطة OpenSSL لتحديد المعالجة الإضافية التي ستحدث. لقيم الإرجاع التالية معانٍ: .IP 2 4 .IX Item 2 يشير هذا إلى أنه تم تعيين \fIctx\fP و \fIhctx\fP ويمكن للجلسة الاستمرار على تلك المعاملات. بالإضافة إلى ذلك، يشير إلى أن تذكرة الجلسة في فترة تجديد ويجب استبدالها. ستستدعي مكتبة OpenSSL \fIcb\fP مرة أخرى مع وسيطة enc بقيمة 1 لتعيين التذكرة الجديدة (انظر RFC5077 3.3 الفقرة 2). .IP 1 4 .IX Item 1 يشير هذا إلى أنه تم تعيين \fIctx\fP و \fIhctx\fP ويمكن للجلسة الاستمرار على تلك المعاملات. .IP 0 4 يشير هذا إلى أنه لم يكن من الممكن تعيين/استرجاع تذكرة جلسة وستستمر جلسة SSL/TLS عن طريق التفاوض على مجموعة من المعاملات التعمية أو باستخدام آلية استئناف SSL/TLS البديلة، معرفات الجلسة. .Sp إذا استُدعيت مع enc مساوية لـ 0، ستستدعي المكتبة \fIcb\fP مرة أخرى للحصول على مجموعة جديدة من المعاملات. .IP "أقل من 0" 4 .IX Item "أقل من 0" يشير هذا إلى خطأ. .PP الدالة \fBSSL_CTX_set_tlsext_ticket_key_cb()\fP مطابقة لـ \&\fBSSL_CTX_set_tlsext_ticket_key_evp_cb()\fP باستثناء أنها تأخذ مؤشر HMAC_CTX مهمل بدلاً من مؤشر EVP_MAC_CTX. قبل بدء دالة الاستدعاء هذه، ستكون \fIhctx\fP قد هُيئت باستخدام \fBEVP_MAC_CTX_new\fP\|(3) وضُبط الملخص باستخدام \&\fBEVP_MAC_CTX_set_params\fP\|(3). يمكن ضبط مادة مفتاح \fIhctx\fP باستخدام \fBHMAC_Init_ex\fP\|(3). .SH ملاحظات .IX Header ملاحظات استئناف الجلسة يختصر المصافحة TLS بحيث لا يحدث تفاوض شهادة العميل. يعوض هذا بتخزين شهادة العميل وجميع معلومات الحالة المتفاوض عليها الأخرى معمّاة داخل التذكرة. في جلسة مستأنفة، ستتوفر للتطبيقات جميع معلومات الحالة هذه تمامًا كما لو حدث تفاوض كامل. .PP إذا تمكن مهاجم من الحصول على المفتاح المستخدم لتعمية تذكرة جلسة، يمكنه الحصول على السر الرئيسي لأي تذكرة باستخدام ذلك المفتاح وفك تعمية أي حركة مرور باستخدام تلك الجلسة: حتى لو كانت مجموعة المُعمِّي تدعم السرية الأمامية. نتيجة لذلك، قد ترغب التطبيقات في استخدام مفاتيح متعددة وتجنب استخدام مفاتيح طويلة الأجل مخزنة في ملفات. .PP يمكن للتطبيقات استخدام مفاتيح أطول للحفاظ على مستوى ثابت من الأمان. على سبيل المثال، إذا استخدمت مجموعة المُعمِّي مُعمِّيات 256 بت ولكن فقط مفتاح تذكرة 128 بت، فإن الأمان الكلي هو 128 بت فقط لأن كسر مفتاح التذكرة سيمكن المهاجم من الحصول على مفاتيح الجلسة. .SH "القيم المُرجعة" .IX Header "القيم المُرجعة" تُرجع 1 للإشارة إلى أن دالة الاستدعاء ضُبطت و0 خلاف ذلك. .SH أمثلة .IX Header أمثلة التنفيذ المرجعي: .PP .Vb 2 \& SSL_CTX_set_tlsext_ticket_key_evp_cb(SSL, ssl_tlsext_ticket_key_cb); \& ... \& \& static int ssl_tlsext_ticket_key_cb(SSL *s, unsigned char key_name[16], \& unsigned char *iv, EVP_CIPHER_CTX *ctx, \& EVP_MAC_CTX *hctx, int enc) \& { \& OSSL_PARAM params[3]; \& your_type_t *key; /* something that you need to implement */ \& \& if (enc) { /* create new session */ \& if (RAND_bytes(iv, EVP_MAX_IV_LENGTH) <= 0) \& return \-1; /* insufficient random */ \& \& key = currentkey(); /* something that you need to implement */ \& if (key == NULL) { \& /* current key doesn\*(Aqt exist or isn\*(Aqt valid */ \& key = createkey(); /* \& * Something that you need to implement. \& * createkey needs to initialise a name, \& * an aes_key, a hmac_key and optionally \& * an expire time. \& */ \& if (key == NULL) /* key couldn\*(Aqt be created */ \& return 0; \& } \& memcpy(key_name, key\->name, 16); \& \& if (EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, key\->aes_key, \& iv) == 0) \& return \-1; /* error in cipher initialisation */ \& \& params[0] = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, \& key\->hmac_key, 32); \& params[1] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, \& "sha256", 0); \& params[2] = OSSL_PARAM_construct_end(); \& if (EVP_MAC_CTX_set_params(hctx, params) == 0) \& return \-1; /* error in mac initialisation */ \& \& return 1; \& \& } else { /* retrieve session */ \& time_t t = time(NULL); \& key = findkey(key_name); /* something that you need to implement */ \& \& if (key == NULL || key\->expire < t) \& return 0; \& \& params[0] = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, \& key\->hmac_key, 32); \& params[1] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, \& "sha256", 0); \& params[2] = OSSL_PARAM_construct_end(); \& if (EVP_MAC_CTX_set_params(hctx, params) == 0) \& return \-1; /* error in mac initialisation */ \& \& if (EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, key\->aes_key, \& iv) == 0) \& return \-1; /* error in cipher initialisation */ \& \& if (key\->expire < t \- RENEW_TIME) { /* RENEW_TIME: implement */ \& /* \& * return 2 \- This session will get a new ticket even though the \& * current one is still valid. \& */ \& return 2; \& } \& return 1; \& } \& } .Ve .SH "انظر أيضًا" .IX Header "انظر أيضًا" \&\fBssl\fP\|(7), \fBSSL_set_session\fP\|(3), \&\fBSSL_session_reused\fP\|(3), \&\fBSSL_CTX_add_session\fP\|(3), \&\fBSSL_CTX_sess_number\fP\|(3), \&\fBSSL_CTX_sess_set_get_cb\fP\|(3), \&\fBSSL_CTX_set_session_id_context\fP\|(3), .SH التاريخ .IX Header التاريخ الدالة \fBSSL_CTX_set_tlsext_ticket_key_cb()\fP أُهملت في OpenSSL 3.0. .PP الدالة \fBSSL_CTX_set_tlsext_ticket_key_evp_cb()\fP قُدمت في OpenSSL 3.0. .SH "حقوق النسخ" .IX Header "حقوق النسخ" حقوق النشر 2014\-2024 لمؤلفي مشروع 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 .