المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux
В إحدى مقالاتنا السابقة تحدثنا عن أهمية المصادقة الثنائية على بوابات الشركات. في المرة الأخيرة، أوضحنا كيفية إعداد المصادقة الآمنة في خادم الويب IIS.

في التعليقات، طُلب منا كتابة تعليمات لخوادم الويب الأكثر شيوعًا لنظام التشغيل Linux - nginx وApache.

لقد سألت - كتبنا.

ماذا تحتاج لتبدأ؟

  • أي توزيعة لينكس حديثة. لقد قمت بإجراء اختبار الإعداد على MX Linux 18.2_x64. هذا بالطبع ليس توزيع خادم، لكن من غير المرجح أن يكون هناك أي اختلافات بالنسبة لديبيان. بالنسبة للتوزيعات الأخرى، قد تختلف المسارات إلى مكتبات التكوين قليلاً.
  • رمز مميز. نواصل استخدام النموذج Rutoken EDS PKIوهو مثالي من حيث خصائص السرعة للاستخدام في الشركات.
  • للعمل مع رمز مميز في Linux، تحتاج إلى تثبيت الحزم التالية:
    libccid libpcsclite1 pcscd pcsc-tools openc

المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

إصدار الشهادات

اعتمدنا في المقالات السابقة على أنه سيتم إصدار شهادات الخادم والعميل باستخدام Microsoft CA. ولكن نظرًا لأننا نقوم بإعداد كل شيء في Linux، فسنخبرك أيضًا عن طريقة بديلة لإصدار هذه الشهادات - دون مغادرة Linux.
سوف نستخدم XCA كـ CA (https://hohnstaedt.de/xca/) ، وهو متاح في أي توزيعة Linux حديثة. يمكن تنفيذ جميع الإجراءات التي سنقوم بتنفيذها في XCA في وضع سطر الأوامر باستخدام الأدوات المساعدة OpenSSL وpkcs11-tool، ولكن لمزيد من البساطة والوضوح، لن نقدمها في هذه المقالة.

الشروع في العمل

  1. تثبيت:
    $ apt-get install xca
  2. ونركض:
    $ xca
  3. قمنا بإنشاء قاعدة البيانات الخاصة بنا لـ CA - /root/CA.xdb
    نوصي بتخزين قاعدة بيانات المرجع المصدق في مجلد يمكن للمسؤول فقط الوصول إليه. يعد هذا أمرًا مهمًا لحماية المفاتيح الخاصة للشهادات الجذرية، والتي تُستخدم لتوقيع جميع الشهادات الأخرى.

إنشاء مفاتيح وشهادة CA الجذر

تعتمد البنية التحتية للمفتاح العام (PKI) على نظام هرمي. الشيء الرئيسي في هذا النظام هو المرجع المصدق الجذري أو المرجع المصدق الجذري. يجب إنشاء شهادتها أولاً.

  1. نقوم بإنشاء مفتاح خاص RSA-2048 لـ CA. للقيام بذلك، في علامة التبويب مفاتيح خاصة يدفع مفتاح جديد واختر النوع المناسب.
  2. قم بتعيين اسم لزوج المفاتيح الجديد. لقد أسميته مفتاح CA.
  3. نقوم بإصدار شهادة CA نفسها باستخدام زوج المفاتيح الذي تم إنشاؤه. للقيام بذلك، انتقل إلى علامة التبويب الشهادات ودفع شهادة جديدة.
  4. تأكد من الاختيار SHA-256لأن استخدام SHA-1 لم يعد من الممكن اعتباره آمنًا.
  5. تأكد من الاختيار كقالب [افتراضي] كاليفورنيا. لا تنسى أن تضغط على تطبيق جميعوإلا فلن يتم تطبيق القالب.
  6. في علامة التبويب الموضوع اختر زوج المفاتيح الخاص بنا. هناك يمكنك ملء جميع الحقول الرئيسية للشهادة.

المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

إنشاء المفاتيح وشهادة خادم https

  1. وبطريقة مماثلة، قمنا بإنشاء مفتاح خاص RSA-2048 للخادم، أسميته Server Key.
  2. عند إنشاء شهادة، نختار أن شهادة الخادم يجب أن تكون موقعة بشهادة CA.
  3. لا تنسى أن تختار SHA-256.
  4. نختار كقالب [افتراضي] HTTPS_server. انقر فوق تطبيق جميع.
  5. ثم على علامة التبويب الموضوع حدد مفتاحنا واملأ الحقول المطلوبة.

المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

إنشاء مفاتيح وشهادة للمستخدم

  1. سيتم تخزين المفتاح الخاص للمستخدم على الرمز المميز الخاص بنا. للعمل معها، تحتاج إلى تثبيت مكتبة PKCS#11 من موقعنا. للتوزيعات الشعبية، نقوم بتوزيع الحزم الجاهزة الموجودة هنا - https://www.rutoken.ru/support/download/pkcs/. لدينا أيضًا تجميعات لـarm64، وarmv7el، وarmv7hf، وe2k، وmipso32el، والتي يمكن تنزيلها من SDK الخاص بنا - https://www.rutoken.ru/developers/sdk/. بالإضافة إلى تجميعات Linux، هناك أيضًا تجميعات لنظام التشغيل macOS وfreebsd وandroid.
  2. إضافة موفر PKCS#11 جديد إلى XCA. للقيام بذلك، انتقل إلى القائمة مزيد من الخيارات إلى علامة التبويب مزود PKCS#11.
  3. نضغط أضف وحدد المسار إلى مكتبة PKCS#11. في حالتي هو usrliblibrtpkcs11ecp.so.
  4. سنحتاج إلى رمز Rutoken EDS PKI المنسق. قم بتنزيل الأداة المساعدة rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. نحن ننفذ
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. نختار مفتاح RSA-2048 لـ Rutoken EDS PKI كنوع المفتاح. لقد اتصلت بمفتاح العميل الرئيسي هذا.

    المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

  7. أدخل رمز PIN. ونحن ننتظر الانتهاء من إنشاء الأجهزة لزوج المفاتيح

    المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

  8. نقوم بإنشاء شهادة للمستخدم عن طريق القياس مع شهادة الخادم. هذه المرة نختار القالب [افتراضي] HTTPS_client ولا تنس النقر تطبيق جميع.
  9. في علامة التبويب الموضوع أدخل معلومات عن المستخدم. نجيب بالإيجاب على طلب حفظ الشهادة للرمز المميز.

ونتيجة لذلك، على علامة التبويب الشهادات في XCA يجب أن تحصل على شيء مثل هذا.

المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux
يعد هذا الحد الأدنى من المفاتيح والشهادات كافيًا لبدء إعداد الخوادم نفسها.

للتكوين، نحتاج إلى تصدير شهادة CA وشهادة الخادم والمفتاح الخاص للخادم.

للقيام بذلك، حدد الإدخال المطلوب في علامة التبويب المقابلة في XCA وانقر فوق تصدير.

إنجن إكس

لن أكتب كيفية تثبيت وتشغيل خادم Nginx - هناك مقالات كافية حول هذا الموضوع على الإنترنت، ناهيك عن الوثائق الرسمية. دعنا ننتقل مباشرة إلى إعداد HTTPS والمصادقة الثنائية باستخدام رمز مميز.

أضف الأسطر التالية إلى قسم الخادم في nginx.conf:

server {
	listen 443 ssl;
	ssl_verify_depth 1;
	ssl_certificate /etc/nginx/Server.crt;
	ssl_certificate_key /etc/nginx/ServerKey.pem;
	ssl_client_certificate /etc/nginx/CA.crt;
	ssl_verify_client on;
}

يمكن العثور هنا على وصف تفصيلي لجميع المعلمات المتعلقة بتكوين SSL في nginx - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

سأصف بإيجاز تلك التي سألتها لنفسي:

  • ssl_verify_client - يحدد ضرورة التحقق من سلسلة الثقة الخاصة بالشهادة.
  • ssl_verify_عمق - يحدد عمق البحث لشهادة الجذر الموثوق بها في السلسلة. نظرًا لأن شهادة العميل الخاصة بنا تم توقيعها على الفور على شهادة الجذر، فسيتم تعيين العمق على 1. إذا تم توقيع شهادة المستخدم على مرجع مصدق وسيط، فيجب تحديد 2 في هذه المعلمة، وهكذا.
  • ssl_client_certificate - يحدد المسار إلى شهادة الجذر الموثوق بها، والتي يتم استخدامها عند التحقق من الثقة في شهادة المستخدم.
  • ssl_certificate/ssl_certificate_key - حدد المسار إلى شهادة الخادم/المفتاح الخاص.

لا تنس تشغيل nginx -t للتأكد من عدم وجود أخطاء إملائية في التكوين، وأن جميع الملفات في المكان الصحيح، وما إلى ذلك.

و هذا كل شيء! كما ترون، الإعداد بسيط للغاية.

التحقق من أنه يعمل في Firefox

نظرًا لأننا نفعل كل شيء بالكامل في Linux، فسوف نفترض أن مستخدمينا يعملون أيضًا في Linux (إذا كان لديهم Windows، إذن راجع تعليمات إعداد المتصفحات في المقالة السابقة.

  1. لنبدأ تشغيل فايرفوكس.
  2. دعنا نحاول تسجيل الدخول بدون رمز مميز أولاً. نحصل على هذه الصورة:

    المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

  3. نحن نذهب الي حول: تفضيلات # الخصوصية، ونذهب إلى الأجهزة الأمنية…
  4. نضغط حمللإضافة برنامج تشغيل جهاز PKCS#11 جديد وتحديد المسار إلى librtpkcs11ecp.so.
  5. للتأكد من أن الشهادة مرئية، يمكنك الذهاب إلى شهادة مدير. سيُطلب منك إدخال رقم التعريف الشخصي (PIN) الخاص بك. بعد الإدخال الصحيح، يمكنك التحقق مما هو موجود في علامة التبويب شهاداتك ظهرت شهادتنا من الرمز المميز.
  6. الآن دعنا نذهب مع الرمز المميز. يطالبك Firefox بتحديد الشهادة التي سيتم تحديدها للخادم. اختر شهادتنا.

    المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

  7. ربح!

    المصادقة الثنائية على الموقع باستخدام رمز USB. الآن أيضًا لنظام التشغيل Linux

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

أباتشي

تمامًا كما هو الحال مع nginx، لا ينبغي أن يواجه أي شخص أي مشكلة في تثبيت Apache. إذا كنت لا تعرف كيفية تثبيت خادم الويب هذا، فما عليك سوى استخدام الوثائق الرسمية.

ونبدأ في إعداد HTTPS والمصادقة الثنائية:

  1. تحتاج أولاً إلى تفعيل mod_ssl:
    $ a2enmod ssl
  2. ثم قم بتمكين إعدادات HTTPS الافتراضية للموقع:
    $ a2ensite default-ssl
  3. نقوم الآن بتحرير ملف التكوين: /etc/Apache2/sites-enabled/default-ssl.conf:
        SSLEngine on
        SSLProtocol all -SSLv2
    
        SSLCertificateFile	/etc/apache2/sites-enabled/Server.crt
        SSLCertificateKeyFile /etc/apache2/sites-enabled/ServerKey.pem
    
        SSLCACertificateFile /etc/apache2/sites-enabled/CA.crt
    
        SSLVerifyClient require
        SSLVerifyDepth  10

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

    $ service apache2 reload
    $ service apache2 restart

  4. كما ترون، فإن إعداد المصادقة الثنائية على أي خادم ويب، سواء في نظام التشغيل Windows أو Linux، يستغرق ساعة واحدة كحد أقصى. ويستغرق إعداد المتصفحات حوالي 5 دقائق. يعتقد العديد من الأشخاص أن إعداد المصادقة الثنائية والعمل بها أمر صعب وغير واضح. آمل أن يفضح مقالتنا هذه الأسطورة، على الأقل قليلا.

يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع. تسجيل الدخول، من فضلك.

هل تحتاج إلى تعليمات لإعداد TLS بشهادات وفقًا لـ GOST 34.10-2012:

  • نعم، TLS-GOST ضروري جدًا

  • لا، الضبط باستخدام خوارزميات GOST ليس أمرًا مثيرًا للاهتمام

صوّت 44 مستخدمًا. امتنع 9 مستخدما عن التصويت.

المصدر: www.habr.com

إضافة تعليق