تشفير حركة مرور TLS وفقًا لخوارزميات GOST-2012 باستخدام Stunnel


في هذه المقالة ، أريد أن أوضح كيفية تكوين Stunnel لاستخدام خوارزميات التشفير الروسية في بروتوكول TLS. على سبيل المكافأة ، سأوضح لك كيفية تشفير قناة TLS باستخدام خوارزميات GOST المطبقة في قلب التشفير Rutoken EDS 2.0.


لكن أولاً ، دعنا نتعرف على ماهية Stunnel. باختصار - هذا برنامج يمكنك من خلاله تحويل منطق تشفير حركة المرور بالكامل بين الخادم والعميل. يتم ذلك على النحو التالي: لنفترض أن لديك عميلًا وخادمًا يتواصل معًا دون استخدام التشفير والتوثيق والتحقق من النزاهة. يمكنك إعادة كتابة العميل والخادم بحيث يتم نقل جميع الرسائل الصادرة والواردة فيما بينها ، مع مراعاة كل هذه النقاط ، ولكن لماذا هذه الصعوبات ، إذا كان يمكنك فقط تحويله إلى أكتاف تطبيق آخر؟ لحل هذه المشكلة ، Stunnel هو مجرد حق.


تحتاج فقط إلى تكوين العميل بحيث يتم نقل كل حركة المرور الخاصة به إلى العميل Stunnel ، بدوره ، يقوم بإنشاء اتصال آمن بالخادم ، وإرسال البيانات إلى خادم Stunnel. Stunnel على الخادم يقوم بفك تشفير حركة المرور الواردة وإعادة توجيه البيانات إلى إدخال الخادم. ما سبق هو أسهل لتحقيق من خلال النظر في هذا المخطط.



تجدر الإشارة إلى أن الخادم ليس بالضرورة أن يكون Stunnel ، للعمل مع خوارزميات التشفير. إنه لأمر رائع أن يكون هناك حوامل مظاهرة جاهزة تدعم التشفير الروسي ، توجد قائمة بها في العرض التقديمي مع RusCrypto'2019 .


نحتاج إلى خوادم مستقرة توفر مصادقة ثنائية الاتجاه.
لقد اخترنا خوادم CryptoPro الأكثر موثوقية مع التنفيذ الكامل لمعيار GOST TLS. شكرا لهم على ذلك :)


يبدو الأمر بسيطًا بدرجة كافية ، فلنحاول تنظيم هذه العملية.


الخطوة التحضيرية


سنحتاج:


  1. بينسل
  2. Stunnel
  3. rtengine
  4. الوصول إلى خوادم اختبار CryptoPro للتحقق من اتصال TLS

يمكن الحصول على OpenSSL for Windows من هنا ، ولمستخدمي Linux - من المستودعات ، أو تجميع نفسك عن طريق تنزيل أحدث إصدار من هنا . يمكن أيضًا أخذها من Rutoken SDK ، من دليل openssl \ openssl-tool-1.1 ، سيكون هذا الأرشيف مفيدًا لنا أيضًا ، أنه يحتوي على rtengine من مصلحة لنا. Stunnel يمكن العثور عليها هنا . الإصدار> = 5.56 مطلوب للتشغيل.


يمكنك تنزيل rtengine من Rutoken SDK ، وهو موجود في الدليل openssl \ rtengine \ bin . تحتاج إلى إسقاطه حيث يتم تخزين جميع محركات openssl. يمكنك العثور على الطريق لهم باستخدام


openssl.exe version -a 

لكن مجرد نقل المحرك إلى المجلد المرغوب فيه ليس كافيًا ؛ فما زلت بحاجة إلى تهيئة openssl للعمل معه. نكتشف أين يقع ملف التكوين openssl.cnf بنفس الأمر الموضح أعلاه (تحت عنوان Windows stunnel يأتي مع نسخته الخاصة من openssl ، لذلك يقع ملف التكوين في المسار \ إلى \ stunnel \ config \ openssl.cnf


 #   : openssl_conf = openssl_def ... #   : # OpenSSL default section [openssl_def] engines = engine_section [engine_section] rtengine = rtengine_section [rtengine_section] engine_id = rtengine dynamic_path = /path/to/rtengine.so MODULE_PATH = /usr/lib/librtpkcs11ecp.so default_algorithms = CIPHERS, DIGEST, PKEY, RAND 

دعنا نتحقق من أن rtengine متصل ، ولهذا نقوم بتوصيل رمز مميز وسرد جميع خوارزميات التشفير:


 openssl ciphers -v 

اسمحوا لي أن أذكرك بأنه في نظام التشغيل Windows ، يجب عليك البحث عن openssl ، الذي يقع بجوار اللعبة
إذا كان بينهم GOSTs لدينا سيكون حاضرا ، ثم يتم إعداد كل شيء بشكل صحيح.


لقد حان الوقت للأكثر إثارة للاهتمام: التحقق من الاتصال مع خوادم اختبار GOST CryptoPro. يتم وصف قائمة بهذه الخوادم هنا ( https://www.cryptopro.ru/products/csp/tc26tls ). يعمل كل من هذه الخوادم مع خوارزمياته الخاصة للمصادقة والتشفير. علاوة على ذلك ، على المنافذ 443 ، 1443 ، 2443 ، ... يتم إطلاق الخدمات التي تقبل معلمات معينة فقط. لذلك ، على سبيل المثال ، في http://tlsgost-256auth.cryptopro.ru ، يتم التشفير باستخدام المصادقة باستخدام الخوارزميات GOST2012-GOST8912-GOST8912 ومفتاح 256 بت. أيضًا ، يستخدم المنفذ 443 XchA-ParamSet ، يستخدم المنفذ 1443 XchB-ParamSet ، يستخدم المنفذ 2443 A-ParamSet ، إلخ.


الآن وبعد أن عرفنا أي مفتاح نحتاج إليه ، دعنا نحصل على شهادة الجذر من خادم الاختبار ، ونعمل على مفاتيح العمل ، ونوقع طلب الشهادة الخاصة بنا.


طريقة بسيطة (تعمل تحت نظامي Windows و Linux)


  1. من أجل الحصول على شهادة الجذر ، سنذهب إلى موقع اختبار CA LLC "CRIPTO-PRO" . وانقر على الزر للحصول على شهادة. ستظهر علامة تبويب جديدة ، ستحتاج إليها لتحديد طريقة تشفير Base64 والنقر فوق الزر "تنزيل شهادة المرجع المصدق" . يتم حفظ ملف certnew.cer الناتج.
  2. اتبع الرابط . قم بتثبيت جميع المكونات الإضافية المطلوبة منا. نضغط على زر "إنشاء مفتاح" ، وحدد الخوارزمية "GOST R 34.10-2012 256 بت" للتوليد. بعد ذلك ، قم بإنشاء طلب شهادة ، في عمود "التطبيق" ، يمكنك تحديد كل شيء. في عمود التطبيق الإضافي: مصادقة العميل ومستخدم مركز تسجيل CryptoPro.
  3. نفتح مرة أخرى موقع المرجع المصدق للاختبار ، ولكن هذه المرة نضغط على الزر "إرسال طلب جاهز PKCS # 10 أو PKCS # 7 المشفر في Base64" . نقوم بلصق محتويات طلبنا في الحقل ، والنقر فوق الزر "Issue" وتحميل شهادة user.crt بتنسيق Base64. يتم حفظ الملف الناتج.

عبر سطر الأوامر


  1. من أجل الحصول على شهادة الجذر ، سنذهب إلى موقع اختبار CA LLC "CRIPTO-PRO" . وانقر على الزر للحصول على شهادة. ستظهر علامة تبويب جديدة ، ستحتاج فيها إلى تحديد طريقة تشفير Base64 والنقر فوق الزر "تنزيل شهادة المرجع المصدق" . يتم حفظ ملف certnew.cer الناتج.


  2. الآن توليد المفاتيح.


     pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-256:B -l --id 45 # 45 --   ASII id  (E) 

    تجدر الإشارة إلى أنه لا يمكن نسخ المفاتيح التي تم إنشاؤها على الرمز المميز من الرمز المميز. هذه هي واحدة من المزايا الرئيسية لاستخدامها.


  3. إنشاء طلب شهادة:


     openssl req -engine rtengine -new -key="pkcs11:id=E" -keyform engine -out client.req 

  4. نفتح مرة أخرى موقع المرجع المصدق للاختبار ، ولكن هذه المرة نضغط على الزر "إرسال طلب جاهز PKCS # 10 أو PKCS # 7 المشفر في Base64" . نقوم بلصق محتويات طلبنا في الحقل ، والنقر على زر العدد وتحميل شهادة user.crt بتنسيق Base64. يتم حفظ الملف الناتج.



كان هناك السؤال الأخير: لماذا كل هذا ؟؟؟ لماذا حصلنا على كل هذه الشهادات والمفاتيح والطلبات؟


والحقيقة هي أن هناك حاجة إليها من قبل بروتوكول TLS للمصادقة ثنائية الاتجاه. إنه يعمل ببساطة شديدة.


لدينا شهادة خادم ، ونحن نعتبرها موثوقة.


يتحقق عميلنا من أن الخادم الذي نعمل معه لديه شهادة مماثلة.
يريد الخادم التأكد من أنه يعمل مع المستخدم الذي يعرفه. لهذا ، أنشأنا طلب شهادة للعمل من خلال مفاتيحنا.


لقد أرسلنا هذا الطلب وقام الخادم بتوقيعه بتوقيعه الرقمي. الآن يمكننا تقديم هذه الشهادة في كل مرة ، موقعة من قبل المرجع المصدق الجذر ، مما يؤكد أننا نحن.


تكوين Stunnel


يبقى فقط لتكوين النفق لدينا بشكل صحيح. للقيام بذلك ، قم بإنشاء ملف stunnel.conf بإعدادات Stunnel الافتراضية واكتب ما يلي هناك:


 ;      - debug = 7 output = /path/to/stunnel.log ;    TLSv1 sslVersion=TLSv1 ;  . engine=rtengine ;     [remote system] client=yes ;  engine,     engineId=rtengine ;   2 (  ) verify = 2 ;     CAFile = /path/to/certnew.cer ;     cert=/path/to/user.crt ;     . key=pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;id=E ;   Stunnel      accept = localhost:8080 connect = tlsgost-256auth.cryptopro.ru:2443 

الآن ، إذا تم كل شيء بشكل صحيح ، يمكنك بدء تشغيل Stunnel من خلال التكوين الخاص بنا والاتصال بالخادم:


 stunnel.exe /path/to/stunnel.conf 

افتح المستعرض وانتقل إلى المضيف المحلي: 8080. إذا كان كل شيء صحيحًا ، فسيتم عرض ما يلي:



إذا لم يكن الأمر كذلك ، فإننا ننظر إلى السجلات ونستخدم مصحح الأخطاء لفهم المشكلة نفسها.


إذا كان لديك أي أسئلة ، فأنت مرحب بك للتعليق :)

Source: https://habr.com/ru/post/ar477650/


All Articles