table of contents
- unstable 4.31.0-1
| SSL_CTX_SET_OPTIONS(3SSL) | OpenSSL | SSL_CTX_SET_OPTIONS(3SSL) |
الاسم¶
SSL_CTX_set_options، SSL_set_options، SSL_CTX_clear_options، SSL_clear_options، SSL_CTX_get_options، SSL_get_options، SSL_get_secure_renegotiation_support - معالجة خيارات SSL
موجز¶
#include <openssl/ssl.h> uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t options); uint64_t SSL_set_options(SSL *ssl, uint64_t options); uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t options); uint64_t SSL_clear_options(SSL *ssl, uint64_t options); uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); uint64_t SSL_get_options(const SSL *ssl); long SSL_get_secure_renegotiation_support(SSL *ssl);
الوصف¶
SSL_CTX_set_options() تُضيف الخيارات المُعيّنة عبر قناع بت في options إلى ctx. ctx يجب ألا يكون NULL. الخيارات المُعيّنة سابقًا لا تُمسح!
SSL_set_options() تُضيف الخيارات المُعيّنة عبر قناع بت في options إلى ssl. الخيارات المُعيّنة سابقًا لا تُمسح!
SSL_CTX_clear_options() تمسح الخيارات المُعيّنة عبر قناع بت في options من ctx.
SSL_clear_options() تمسح الخيارات المُعيّنة عبر قناع بت في options من ssl.
SSL_CTX_get_options() تُرجع الخيارات المُعيّنة لـ ctx.
SSL_get_options() تُرجع الخيارات المُعيّنة لـ ssl.
SSL_get_secure_renegotiation_support() تُشير إلى ما إذا كان النظير يدعم إعادة التفاوض الآمنة. لاحظ، هذا مُنفّذ عبر ماكرو.
ملاحظات¶
يمكن تغيير سلوك مكتبة SSL بتعيين عدة خيارات. الخيارات مُرمّزة كأقنعة بت ويمكن دمجها عبر عملية أو البتية (|).
SSL_CTX_set_options() و SSL_set_options() تؤثران على سلوك البروتوكول (الخارجي) لمكتبة SSL. يمكن تغيير سلوك API (الداخلي) باستخدام الدوال المماثلة SSL_CTX_set_mode(3) و SSL_set_mode().
أثناء المصافحة، تُستخدم إعدادات الخيارات لكائن SSL. عند إنشاء كائن SSL جديد من سياق باستخدام SSL_new()، تُنسخ إعدادات الخيارات الحالية. التغييرات على ctx لا تؤثر على كائنات SSL المُنشأة مسبقًا. SSL_clear() لا يؤثر على الإعدادات.
الخيارات التالية لتجاوز الأخطاء متاحة:
- SSL_OP_CRYPTOPRO_TLSEXT_BUG
- أضف امتداد server-hello من الإصدار المبكر لمسودة cryptopro عند التفاوض على مجموعة معميات GOST. مطلوب للتوافق البيني مع CryptoPro CSP 3.x.
- SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
- يعطّل إجراءً مضادًا ضد ثغرة بروتوكول SSL 3.0/TLS 1.0 التي تؤثر على معميات CBC، والتي لا يمكن معالجتها بواسطة بعض تطبيقات SSL المعطوبة. هذا الخيار ليس له تأثير على الاتصالات التي تستخدم معميات أخرى.
- SSL_OP_SAFARI_ECDHE_ECDSA_BUG
- لا تُفضل المُعمِّيات ECDHE-ECDSA عندما يبدو العميل كـ Safari على OS X. OS X 10.8..10.8.3 لديه دعم معطل للمُعمِّيات ECDHE-ECDSA.
- SSL_OP_TLSEXT_PADDING
- يُضيف امتداد حشو لضمان ألا يتراوح حجم ClientHello بين 256 و511 بايت. هذا ضروري كحل بديل لبعض التطبيقات.
- SSL_OP_ALL
- جميع الحلول البديلة للأخطاء المذكورة أعلاه.
من الآمن عادةً استخدام SSL_OP_ALL لتفعيل خيارات الحلول البديلة للأخطاء إذا كانت التوافقية مع تطبيقات معطوبة جزئيًا مرغوبة.
الخيارات المعدّلة التالية متاحة:
- SSL_OP_ALLOW_CLIENT_RENEGOTIATION
- إعادة التفاوض التي يبدأها العميل مُعطّلة مبدئيًا. استخدم هذا الخيار لتفعيلها.
- SSL_OP_ALLOW_NO_DHE_KEX
- في TLSv1.3، اسمح بوضع تبادل مفاتيح لا يعتمد على (ec)dhe عند الاستئناف. وهذا يعني أنه لن يكون هناك سرية أمامية (forward secrecy) للجلسة المستأنفة.
- SSL_OP_PREFER_NO_DHE_KEX
- في TLSv1.3، عند الاستئناف، دع الخادم يُفضّل وضع تبادل مفاتيح غير قائم على (ec)dhe على الوضع القائم على (ec)dhe. يُتجاهل دون تعيين SSL_OP_ALLOW_NO_DHE_KEX أيضًا. يُتجاهل دائمًا على العميل.
- SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
- اسمح بإعادة التفاوض غير الآمنة القديمة بين OpenSSL والعملاء أو الخوادم غير المُصحّحة. راجع قسم SECURE RENEGOTIATION لمزيد من التفاصيل.
- SSL_OP_SERVER_PREFERENCE
- عند اختيار مُعمٍّ، توقيع، منحنى (TLS 1.2) أو مجموعة (TLS 1.3)، استخدم تفضيلات الخادم بدلاً من تفضيلات العميل. عندما لا يُضبط، يتبع خادم SSL دائمًا تفضيلات العملاء. عندما يُضبط، يختار خادم SSL/TLS وفقًا لتفضيلاته الخاصة. لا يزال استخدام الاسم القديم والمضلل إلى حد ما SSL_OP_CIPHER_SERVER_PREFERENCE ممكنًا ولكنه مُثبط.
- SSL_OP_CISCO_ANYCONNECT
- استخدم معرف إصدار Cisco لـ DTLS_BAD_VER عند إنشاء اتصال DTLSv1. متاح فقط عند استخدام واجهة برمجة التطبيقات المُهملة DTLSv1_client_method().
- SSL_OP_CLEANSE_PLAINTEXT
- مبدئيًا،
تحتفظ
كائنات TLS و QUIC SSL
بنسخة من
بيانات
التطبيق
النصية
الصريحة
المستلمة
في مخزن
مؤقت ثابت
حتى
تُستبدل
بالجزء
التالي من
البيانات.
عند تفعيل
SSL_OP_CLEANSE_PLAINTEXT،
تُنظّف
بيانات
التطبيق
المُفكّكة
باستدعاء
OPENSSL_cleanse(3) بعد
تمرير
البيانات
إلى
التطبيق.
تُنظّف
البيانات
أيضًا عند
تحرير
الاتصال
(مثل SSL_free(3)).
بما أن OpenSSL ينظف فقط المخازن المؤقتة الداخلية، فإن التطبيق لا يزال مسؤولاً عن تنظيف جميع المخازن المؤقتة الأخرى. والأهم من ذلك، ينطبق هذا على المخازن المؤقتة الممررة إلى دوال مثل SSL_read(3)، SSL_peek(3) وكذلك SSL_write(3).
اتصالات TLS لا تخزن البيانات المرسلة كنص واضح في مخزن مؤقت. كائنات تدفق QUIC تخزن البيانات النصية الواضحة المرسلة في مخزن مؤقت، وسيتسبب هذا الخيار أيضًا في تنظيف تلك البيانات عند التخلص منها.
يمكن تعيين هذا الخيار بشكل مختلف على كائنات تدفق QUIC الفردية وليس له تأثير على كائنات اتصال QUIC (باستثناء عند استخدام تدفق مبدئي).
- SSL_OP_COOKIE_EXCHANGE
- تشغيل تبادل الكعكات كما هو موصوف في RFC4347 القسم 4.2.1. يؤثر فقط على اتصالات DTLS.
- SSL_OP_DISABLE_TLSEXT_CA_NAMES
- عطّل إضافة TLS لأسماء المراجع المصدقة (CA Names). قد ترغب في تعطيلها لأسباب أمنية أو للتوافق مع بعض تطبيقات Windows TLS التي تنهار عندما تكون هذه الإضافة أكبر من 1024 بايت.
- SSL_OP_ENABLE_KTLS
- تمكين
استخدام TLS
النواة.
للاستفادة
من TLS
النواة،
يجب أن يكون
OpenSSL قد جُمِع
مع دعم له،
ويجب أن
يكون
مدعومًا من
قبل
مجموعات
المُعمِّيات
والامتدادات
المتفاوض
عليها. قد
تختلف
مجموعات
المُعمِّيات
والامتدادات
المحددة
المدعومة
حسب المنصة
وإصدار
النواة.
مسار بيانات TLS النواة ينفذ طبقة السجل وخوارزمية التعمية. ستستخدم النواة أفضل عتاد متاح للتعمية. يجب أن يقلل استخدام مسار بيانات النواة من بصمة ذاكرة OpenSSL لأنه لا يلزم تخزين مؤقت. أيضًا، يجب أن يتحسن الإنتاجية لأنه يتم تجنب نسخ البيانات عندما تُعمى بيانات المستخدم في ذاكرة النواة بدلاً من التعمية المعتادة ثم النسخ إلى النواة.
قد لا يدعم TLS النواة جميع ميزات OpenSSL. على سبيل المثال، إعادة التفاوض وتعيين الحد الأقصى لحجم القطعة غير ممكنين اعتبارًا من Linux 4.20.
لاحظ أنه مع تمكين TLS النواة، تُنفذ بعض العمليات التعميمية بواسطة النواة مباشرة وليس عبر أي مزودي OpenSSL متاحين. قد يكون هذا غير مرغوب فيه إذا، على سبيل المثال، يتطلب التطبيق أن تُنفذ جميع العمليات التعميمية بواسطة مزود FIPS.
- SSL_OP_ENABLE_KTLS_TX_ZEROCOPY_SENDFILE
- مع هذا
الخيار،
سيستخدم sendfile()
وضع النسخ
الصفري،
مما يعطي
تحسينًا في
الأداء عند
استخدامه
مع تفريغ
عتاد KTLS. لاحظ
أنه قد
تُنقل
سجلات TLS غير
صالحة إذا
تغير الملف
أثناء
إرساله. ليس
لهذا
الخيار
تأثير إذا
لم يكن SSL_OP_ENABLE_KTLS
ممكّنًا.
ينطبق هذا الخيار على Linux فقط. لا يُقدم KTLS sendfile على FreeBSD خيارًا لتعطيل النسخ الصفري ويعمل دائمًا في هذا الوضع.
- SSL_OP_ENABLE_MIDDLEBOX_COMPAT
- إذا تم تعيينه، فسيتم إرسال رسائل تغيير مواصفات التعمية (CCS) الوهمية في TLSv1.3. هذا له تأثير جعل TLSv1.3 يبدو أشبه بـ TLSv1.2 بحيث لا تقطع الصناديق الوسيطة التي لا تفهم TLSv1.3 الاتصال. بغض النظر عما إذا كان هذا الخيار معينًا أم لا، سيتم دائمًا تجاهل رسائل CCS المستلمة من النظير في TLSv1.3. هذا الخيار معين مبدئيًا. لإيقاف تشغيله، استخدم SSL_clear_options(). قد لا يعين إصدار مستقبلي من OpenSSL هذا مبدئيًا.
- SSL_OP_IGNORE_UNEXPECTED_EOF
- بعض
تطبيقات TLS
لا ترسل
تنبيه close_notify
الإلزامي
عند
الإغلاق.
إذا حاول
التطبيق
انتظار
تنبيه close_notify
لكن النظير
أغلق
الاتصال
دون
إرساله،
يتم إنشاء
خطأ. عندما
يكون هذا
الخيار
ممكّنًا،
لا يحتاج
النظير إلى
إرسال
تنبيه close_notify
وسيتم
التعامل مع
الاتصال
المغلق كما
لو تم
استلام
تنبيه close_notify.
يجب عليك تمكين هذا الخيار فقط إذا كان البروتوكول الذي يعمل فوق TLS يمكنه اكتشاف هجوم الاقتطاع بنفسه، وأن التطبيق يتحقق من هجوم الاقتطاع ذلك.
لمزيد من المعلومات حول إغلاق اتصال، انظر SSL_shutdown(3).
- SSL_OP_LEGACY_SERVER_CONNECT
- اسمح بإعادة التفاوض غير الآمن القديم بين OpenSSL والخوادم غير المُصححة فقط. راجع القسم إعادة التفاوض الآمن لمزيد من التفاصيل.
- SSL_OP_LEGACY_EC_POINT_FORMATS
- فعّل استخدام تنسيقات النقاط القديمة للمنحنيات الإهليلجية. يُفعّل هذا الخيار دعم تنسيقات النقاط المضغوطة ANSI X9.62 prime وchar2 المُهملة، بالإضافة إلى التنسيق غير المضغوط المُفعّل مبدئيًا.
- SSL_OP_NO_ANTI_REPLAY
- مبدئيًا، عندما يُهيأ خادم للبيانات المبكرة (أي max_early_data > 0)، يُشغّل OpenSSL حماية إعادة التشغيل. راجع SSL_read_early_data(3) لوصف ميزة حماية إعادة التشغيل. تُطلب إجراءات مكافحة إعادة التشغيل للامتثال لمواصفات TLSv1.3. قد تتمكن بعض التطبيقات من تخفيف مخاطر إعادة التشغيل بطرق أخرى، وفي هذه الحالات لا تُطلب وظيفة OpenSSL المدمجة. يمكن لتلك التطبيقات إيقاف تشغيل هذه الميزة بتعيين هذا الخيار. هذا خيار من جانب الخادم فقط. يُتجاهل من قبل العملاء.
- SSL_OP_NO_TX_CERTIFICATE_COMPRESSION
- عادةً،
سيحاول
العملاء
والخوادم
شفافية
التفاوض
على خيار
ضغط
الشهادة RFC8879
على
اتصالات TLSv1.3.
إذا عُيّن هذا الخيار، يُتجاهل امتداد ضغط الشهادة عند الاستلام، ولن تُرسل الشهادات المضغوطة إلى النظير.
- SSL_OP_NO_RX_CERTIFICATE_COMPRESSION
- عادةً،
سيحاول
العملاء
والخوادم
شفافية
التفاوض
على خيار
ضغط
الشهادة RFC8879
على
اتصالات TLSv1.3.
إذا عُيّن هذا الخيار، لن يُرسل امتداد ضغط الشهادة ولن تُقبل الشهادات المضغوطة من النظير.
- SSL_OP_NO_COMPRESSION
- لا تستخدم ضغط سجل TLS حتى لو كان مدعومًا. يُعيّن هذا الخيار مبدئيًا. لإيقاف تشغيله، استخدم SSL_clear_options(). لاحظ أن ضغط سجل TLS غير موصى به وغير متوفر في مستوى الأمان 2 أو أعلى. من OpenSSL 3.2، مستوى الأمان المبدئي هو 2، لذا فإن مسح هذا الخيار لن يكون له تأثير دون تغيير مستوى الأمان المبدئي أيضًا. راجع SSL_CTX_set_security_level(3).
- SSL_OP_NO_ENCRYPT_THEN_MAC
- عادةً،
سيحاول
العملاء
والخوادم
شفافية
التفاوض
على خيار
التشفير ثم
MAC RFC7366 على
اتصال TLS وDTLS.
إذا عُيّن هذا الخيار، يُعطّل تشفير ثم MAC. لن يقترح العملاء، ولن يقبل الخوادم الامتداد.
- SSL_OP_NO_EXTENDED_MASTER_SECRET
- عادةً،
سيحاول
العملاء
والخوادم
شفافية
التفاوض
على خيار
السر
الرئيسي
الموسع RFC7627
على اتصال TLS
وDTLS.
إذا عُيّن هذا الخيار، يُعطّل السر الرئيسي الموسع. لن يقترح العملاء، ولن يقبل الخوادم الامتداد.
- SSL_OP_NO_QUERY_MTU
- لا تستعلم عن MTU. يؤثر فقط على اتصالات DTLS.
- SSL_OP_NO_RENEGOTIATION
- عطّل كل إعادة التفاوض في (D)TLSv1.2 والإصدارات الأقدم. لا تُرسل رسائل HelloRequest، وتجاهل طلبات إعادة التفاوض عبر ClientHello.
- SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
- عند أداء إعادة التفاوض كخادم، ابدأ دائمًا جلسة جديدة (أي، طلبات استئناف الجلسة تُقبل فقط في المصافحة الأولية). هذا الخيار غير ضروري للعملاء.
- SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1, SSL_OP_NO_TLSv1_1, SSL_OP_NO_TLSv1_2, SSL_OP_NO_TLSv1_3, SSL_OP_NO_DTLSv1, SSL_OP_NO_DTLSv1_2
- هذه الخيارات تُعطّل إصدارات البروتوكول SSLv3، TLSv1، TLSv1.1، TLSv1.2 أو TLSv1.3 مع TLS أو إصدارات DTLSv1، DTLSv1.2 مع DTLS، على التوالي. اعتبارًا من OpenSSL 1.1.0، هذه الخيارات مُهمَلة، استخدم SSL_CTX_set_min_proto_version(3) و SSL_CTX_set_max_proto_version(3) بدلاً من ذلك.
- SSL_OP_NO_TICKET
- يدعم SSL/TLS
آليتين
لاستئناف
الجلسات:
معرفات
الجلسة
وتذاكر
الجلسة
عديمة
الحالة.
عند استخدام معرفات الجلسة، تُخبّأ نسخة من معلومات الجلسة على الخادم ويُرسل معرف فريد إلى العميل. عندما يرغب العميل في الاستئناف، يُوفّر المعرف الفريد ليتمكن الخادم من استرجاع معلومات الجلسة من خبيئته.
عند استخدام تذاكر الجلسة عديمة الحالة، يستخدم الخادم مفتاح تعمية تذكرة الجلسة لتعمية معلومات الجلسة. تُرسل هذه البيانات المُعمّاة إلى العميل كـ"تذكرة". عندما يرغب العميل في الاستئناف، يُرسل البيانات المُعمّاة عائدة إلى الخادم. يستخدم الخادم مفتاحه لفك تعمية البيانات واستئناف الجلسة. بهذه الطريقة، يمكن للخادم العمل بدون حالة - لا حاجة لتخبئة معلومات الجلسة محليًا.
بروتوكول TLSv1.3 يدعم التذاكر فقط ولا يدعم معرفات الجلسة مباشرة. ومع ذلك، يسمح OpenSSL بنمطين من تشغيل التذاكر في TLSv1.3: ذات حالة وعديمة الحالة. التذاكر عديمة الحالة تعمل بنفس الطريقة كما في TLSv1.2 وما دونه. التذاكر ذات الحالة تُحاكي سلوك معرف الجلسة المتاح في TLSv1.2 وما دونه. تُخبّأ معلومات الجلسة على الخادم ويُلف معرف الجلسة في تذكرة ويُعاد إرساله إلى العميل. عندما يرغب العميل في الاستئناف، يُقدّم تذكرة بنفس الطريقة كما للتذاكر عديمة الحالة. يمكن للخادم بعد ذلك استخراج معرف الجلسة من التذكرة واسترجاع معلومات الجلسة من خبيئته.
مبدئيًا، سيستخدم OpenSSL التذاكر عديمة الحالة. خيار SSL_OP_NO_TICKET سيؤدي إلى عدم إصدار التذاكر عديمة الحالة. في TLSv1.2 وما دونه، هذا يعني عدم إرسال أي تذكرة إلى العميل على الإطلاق. في TLSv1.3، ستُرسل تذكرة ذات حالة. هذا خيار من جانب الخادم فقط.
في TLSv1.3، من الممكن كبت كل التذاكر (ذات الحالة وعديمة الحالة) من الإرسال باستدعاء SSL_CTX_set_num_tickets(3) أو SSL_set_num_tickets(3).
- SSL_OP_PRIORITIZE_CHACHA
- عند تعيين SSL_OP_SERVER_PREFERENCE، أعد ترتيب أولويات المُعمّيات ChaCha20-Poly1305 مؤقتًا إلى أعلى قائمة المُعمّيات للخادم إذا كان مُعمّي ChaCha20-Poly1305 في أعلى قائمة المُعمّيات للعميل. هذا يساعد هؤلاء العملاء (مثل الجوال) على استخدام ChaCha20-Poly1305 إذا كان ذلك المُعمّي في أي مكان في قائمة المُعمّيات للخادم؛ لكنه لا يزال يسمح للعملاء الآخرين باستخدام AES ومُعمّيات أخرى. يتطلب SSL_OP_SERVER_PREFERENCE.
- SSL_OP_TLS_ROLLBACK_BUG
- عطّل كشف
هجوم
التراجع عن
الإصدار.
أثناء تبادل مفتاح العميل، يجب على العميل إرسال نفس المعلومات حول مستويات بروتوكول SSL/TLS المقبولة كما في أول ترحيب. ينتهك بعض العملاء هذه القاعدة عن طريق التكيف مع رد الخادم. (مثال: يُرسل العميل ترحيب SSLv2 ويقبل حتى SSLv3.1=TLSv1، يفهم الخادم فقط حتى SSLv3. في هذه الحالة، يجب على العميل استخدام نفس الإعلان SSLv3.1=TLSv1. يتراجع بعض العملاء إلى SSLv3 فيما يتعلق برد الخادم وينتهكون حماية التراجع عن الإصدار.)
الخيارات التالية لم يعد لها أي تأثير ولكن تُحتفظ بمعرفاتها لأغراض التوافق:
- SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
- SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
- SSL_OP_SSLEAY_080_CLIENT_DH_BUG
- SSL_OP_TLS_D5_BUG
- SSL_OP_TLS_BLOCK_PADDING_BUG
- SSL_OP_MSIE_SSLV2_RSA_PADDING
- SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
- SSL_OP_MICROSOFT_SESS_ID_BUG
- SSL_OP_NETSCAPE_CHALLENGE_BUG
- SSL_OP_PKCS1_CHECK_1
- SSL_OP_PKCS1_CHECK_2
- SSL_OP_SINGLE_DH_USE
- SSL_OP_SINGLE_ECDH_USE
- SSL_OP_EPHEMERAL_RSA
- SSL_OP_NETSCAPE_CA_DN_BUG
- SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
إعادة التفاوض الآمن¶
يحاول OpenSSL آلي استخدام إعادة التفاوض الآمن كما هو موصوف في RFC5746. هذا يصد هجوم البادئة الموصوف في CVE-2009-3555 وفي أماكن أخرى.
لهذا الهجوم عواقب بعيدة المدى يجب أن يكون كتاب التطبيقات على دراية بها. في الوصف أدناه، يُشار إلى التنفيذ الذي يدعم إعادة التفاوض الآمن باسم patched. ويُشار إلى الخادم الذي لا يدعم إعادة التفاوض الآمن باسم unpatched.
تصف الأقسام التالية العمليات المسموح بها بواسطة تنفيذ إعادة التفاوض الآمن لـ OpenSSL.
العميل والخادم المُصحَّحان¶
يُسمح دائمًا بالاتصالات وإعادة التفاوض بواسطة تطبيقات OpenSSL.
العميل غير المُصحَّح وخادم OpenSSL المُصحَّح¶
تنجح الاتصالات الأولية ولكن يرفض الخادم إعادة التفاوض من العميل مع تنبيه تحذيري no_renegotiation إذا استُخدم TLS v1.0 أو تنبيه قاتل handshake_failure في SSL v3.0.
إذا حاول خادم OpenSSL المُصحَّح إعادة التفاوض، يُرسل تنبيه قاتل handshake_failure. وذلك لأن كود الخادم قد لا يكون على دراية بالطبيعة غير المُصحَّحة للعميل.
إذا وُضع الخيار SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION فإن إعادة التفاوض تنجح دائمًا.
عميل OpenSSL المُصحَّح والخادم غير المُصحَّح¶
إذا وُضع الخيار SSL_OP_LEGACY_SERVER_CONNECT أو SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION فإن الاتصالات الأولية وإعادة التفاوض بين عملاء OpenSSL المُصحَّحين والخوادم غير المُصحَّحة تنجح. إذا لم يُوضع أي من الخيارين، فإن الاتصالات الأولية بالخوادم غير المُصحَّحة تفشل.
وضع الخيار SSL_OP_LEGACY_SERVER_CONNECT له آثار أمنية؛ العملاء المستعدون للاتصال بخوادم لا تطبق إعادة التفاوض الآمنة RFC 5746 معرضون لهجمات مثل CVE-2009-3555.
تطبيقات عميل OpenSSL الراغبة في ضمان قدرتها على الاتصال بالخوادم غير المُصحَّحة يجب أن تضع SSL_OP_LEGACY_SERVER_CONNECT دائمًا
تطبيقات عميل OpenSSL التي تريد ضمان أنها لا تستطيع الاتصال بالخوادم غير المُصحَّحة (وبالتالي تجنب أي مشكلات أمنية) يجب أن تمسح SSL_OP_LEGACY_SERVER_CONNECT باستخدام SSL_CTX_clear_options() أو SSL_clear_options().
الفرق بين الخيارين SSL_OP_LEGACY_SERVER_CONNECT وSSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION هو أن SSL_OP_LEGACY_SERVER_CONNECT يُفعّل الاتصالات الأولية وإعادة التفاوض الآمنة بين عملاء OpenSSL والخوادم غير المُصحَّحة Bفقط، بينما SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION يسمح بالاتصالات الأولية وإعادة التفاوض بين OpenSSL والعملاء أو الخوادم غير المُصحَّحة.
قابلية تطبيق الخيارات على اتصالات وتدفقات QUIC¶
تنطبق هذه الخيارات على كائنات SSL التي تشير إلى اتصال QUIC:
- SSL_OP_ALLOW_NO_DHE_KEX
- SSL_OP_NO_TX_CERTIFICATE_COMPRESSION
- SSL_OP_NO_RX_CERTIFICATE_COMPRESSION
- SSL_OP_NO_TICKET
- SSL_OP_PRIORITIZE_CHACHA
تنطبق هذه الخيارات على كائنات SSL التي تشير إلى تدفق QUIC:
تُهيَّأ الخيارات على اتصالات QUIC من الخيارات الموضوعة على SSL_CTX قبل إنشاء كائن SSL لاتصال QUIC. تُهيَّأ الخيارات على تدفقات QUIC من الخيارات المكوَّنة على كائن SSL لاتصال QUIC الذي أُنشئت منه.
وضع خيارات تتعلق بتدفقات QUIC على كائن SSL لاتصال QUIC ليس له تأثير مباشر على كائن SSL لاتصال QUIC نفسه، ولكنه سيغير الخيارات الموضوعة على التدفق المبدئي (إن وُجد) وسيحدد أيضًا الخيارات المبدئية الموضوعة على أي تدفقات مستقبلية تُنشأ.
الخيارات الأخرى غير المذكورة أعلاه ليس لها تأثير وسيتم تجاهلها.
يمكن أيضًا وضع الخيارات المتعلقة بتدفقات QUIC مباشرة على كائنات SSL لتدفق QUIC. وضع خيارات متعلقة بالاتصال على مثل هذا الكائن ليس له تأثير.
القيم المُرجعة¶
تُرجع SSL_CTX_set_options() وSSL_set_options() قناع البت الجديد للخيارات بعد إضافة options.
SSL_CTX_clear_options() و SSL_clear_options() تُعيد قناع الخيارات الجديد بعد مسح options.
SSL_CTX_get_options() و SSL_get_options() تُعيد قناع الخيارات الحالي.
SSL_get_secure_renegotiation_support() تُعيد 1 إذا كان النظير يدعم إعادة التفاوض الآمن و 0 إذا لم يدعمه.
انظر أيضًا¶
ssl(7), SSL_new(3), SSL_clear(3), SSL_shutdown(3) SSL_CTX_set_tmp_dh_callback(3), SSL_CTX_set_min_proto_version(3), openssl-dhparam(1)
التاريخ¶
أُضيفت محاولة استخدام إعادة التفاوض الآمن دائمًا في OpenSSL 0.9.8m.
أُضيفت الخيارات SSL_OP_PRIORITIZE_CHACHA و SSL_OP_NO_RENEGOTIATION في OpenSSL 1.1.1.
أُضيفت الخيارات SSL_OP_NO_EXTENDED_MASTER_SECRET و SSL_OP_IGNORE_UNEXPECTED_EOF في OpenSSL 3.0.
غُيّرت ثوابت SSL_OP_ والمعاملات وقيم الإرجاع المقابلة للدوال المتأثرة إلى نوع "uint64_t" في OpenSSL 3.0. لهذا السبب، لم يعد من الممكن استخدام قيم ماكرو SSL_OP_ في شروط المعالج الأولي "#if". ومع ذلك، لا يزال من الممكن اختبار ما إذا كانت هذه الماكروات مُعرَّفة أم لا.
اعتبارًا من OpenSSL 3.6، يُثبط استخدام الثابت SSL_OP_CIPHER_SERVER_PREFERENCE وأصبحت دلالاته متاحة باستخدام الثابت الأكثر تسمية مناسبة SSL_OP_SERVER_PREFERENCE.
حقوق النسخ¶
حقوق النشر 2001-2025 لمؤلفي مشروع 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 |