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:

SSL_OP_CLEANSE_PLAINTEXT

تُهيَّأ الخيارات على اتصالات 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 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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