OpenSSL: مشكلة تمديد SessionTicket TLS
-
28-09-2019 - |
سؤال
أنا أستخدم تطبيقًا يستخدم OpenSSL لجانب TLS العميل. نقوم بترقية إصدار OpenSSL من 0.9.8e إلى 0.9.8k. ثم TLS لا يعمل ...
يوضح Wireshark أن الإصدار الجديد (مع OpenSSL 0.9.8k) يرسل حزمة Hello Client مع امتداد SessionTicket - ويستجيب جانب الخادم بخطأ داخلي مميت.
يرسل الإصدار السابق حزمة Hello متطابقة تقريبًا ، ولكن بدون SessionTicket Ext.
عندما قمت باستبدال TLSV1_CLIENT_METHOD بـ SSLV23_CLIENT_METHOD ، كان كل شيء يعمل بشكل جيد - كانت حزمة Hello Client Hello مرسلة عبارة عن SSLV2 (في sniffer) دون أي امتداد (كما لم يكن TLS ولكن SSL؟)
هل هناك طريقة أفضل لتعطيل هذا التمديد أو حل المشكلة بطريقة أخرى؟
شكرا مقدما ، RURSW1
المحلول
اقتباس من RFC 5077: "لاحظ أن ترميز امتداد SessionTicket فارغ كان غامضًا في RFC 4507. قد يكون تطبيق RFC 4507 قد قام بترميزه على النحو التالي:
00 23 Extension type 35
00 02 Length of extension contents
00 00 Length of ticket
أو قد يكون ترميزها بنفس طريقة هذا التحديث:
00 23 Extension type 35
00 00 Length of extension contents
يجب على خادم يرغب في دعم عملاء RFC 4507 الاستجابة لتمديد SessionTicket فارغ مشفر بنفس الطريقة التي تلقاها. "لذا فإن الخادم الذي عملت فيه مع دعم RFC 4507 وليس الأحدث 5077.
إزالته "عادة" باستخدام SSL_CTX_SET_OPTIONS مع SSL_OP_NO_TICKET حل المشكلة.
امل ان يساعد هذا احد...
تحرير: حسنًا ، يمكن القيام بذلك أيضًا باستخدام علامة التكوين -TLSEXT. (عند تشغيل Perl Configure Script). ولكن ، انتبه إلى أنه في Openssl 0.9.8n و Openssl 1.0.0 ، ستحتاج إلى التعليق على بعض أجزاء الكود المصدري أو لن يتم تجميعها - لأن إعادة التفاوض الآمنة (التي تعتبر غير آمنة من تلقاء نفسها) هو - هي.