احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس
В یکی از مقالات قبلی ما ما در مورد اهمیت احراز هویت دو مرحله ای در پورتال های شرکتی شرکت ها صحبت کردیم. آخرین بار نحوه تنظیم احراز هویت ایمن در وب سرور IIS را نشان دادیم.

در نظرات، از ما خواسته شد تا دستورالعمل هایی را برای رایج ترین سرورهای وب برای لینوکس - nginx و Apache بنویسیم.

شما پرسیدید - ما نوشتیم.

شما برای شروع به چی نیاز دارید؟

  • هر توزیع مدرن لینوکس. من یک راه اندازی آزمایشی روی MX Linux 18.2_x64 انجام دادم. البته این یک توزیع سرور نیست، اما بعید است که تفاوتی برای دبیان وجود داشته باشد. برای سایر توزیع‌ها، مسیرهای کتابخانه‌های پیکربندی ممکن است کمی متفاوت باشد.
  • رمز. ما به استفاده از مدل ادامه می دهیم روتوکن EDS PKI، که از نظر ویژگی های سرعت برای استفاده شرکتی ایده آل است.
  • برای کار با توکن در لینوکس، باید بسته های زیر را نصب کنید:
    libccid libpcsclite1 pcscd pcsc-tools opensc

احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

صدور گواهینامه

در مقاله‌های قبلی، ما به این واقعیت متکی بودیم که گواهی‌های سرور و کلاینت با استفاده از Microsoft CA صادر می‌شوند. اما از آنجایی که ما همه چیز را در لینوکس راه‌اندازی می‌کنیم، روش دیگری برای صدور این گواهی‌ها - بدون خروج از لینوکس - به شما خواهیم گفت.
ما از XCA به عنوان CA استفاده خواهیم کرد (https://hohnstaedt.de/xca/) که در هر توزیع لینوکس مدرن موجود است. تمام اقداماتی که در XCA انجام خواهیم داد را می توان در حالت خط فرمان با استفاده از ابزار OpenSSL و pkcs11-tool انجام داد، اما برای سادگی و وضوح بیشتر، آنها را در این مقاله ارائه نمی کنیم.

شروع

  1. نصب:
    $ apt-get install xca
  2. و اجرا می کنیم:
    $ xca
  3. ما پایگاه داده خود را برای CA - /root/CA.xdb ایجاد می کنیم
    توصیه می کنیم پایگاه داده Certificate Authority را در پوشه ای ذخیره کنید که فقط مدیر به آن دسترسی داشته باشد. این مهم برای محافظت از کلیدهای خصوصی گواهی های ریشه است که برای امضای سایر گواهی ها استفاده می شود.

کلیدها و گواهی CA ریشه ایجاد کنید

زیرساخت کلید عمومی (PKI) بر اساس یک سیستم سلسله مراتبی است. نکته اصلی در این سیستم مرجع صدور گواهی ریشه یا root CA است. ابتدا باید گواهی آن ایجاد شود.

  1. ما یک کلید خصوصی RSA-2048 برای CA ایجاد می کنیم. برای انجام این کار، در برگه کلیدهای خصوصی فشار دادن کلید جدید و نوع مناسب را انتخاب کنید.
  2. یک نام برای جفت کلید جدید تعیین کنید. اسمش را گذاشتم CA Key.
  3. ما گواهینامه CA را با استفاده از جفت کلید ایجاد شده صادر می کنیم. برای انجام این کار، به تب بروید گواهینامه ها و کلیک کنید گواهی جدید.
  4. حتما انتخاب کنید SHA-256، زیرا استفاده از SHA-1 دیگر نمی تواند ایمن در نظر گرفته شود.
  5. حتما به عنوان الگو انتخاب کنید [پیش‌فرض] CA. فراموش نکنید که روی آن کلیک کنید همه را به کار ببر، در غیر این صورت الگو اعمال نمی شود.
  6. در برگه موضوع جفت کلید ما را انتخاب کنید در آنجا می توانید تمام فیلدهای اصلی گواهی را پر کنید.

احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

ایجاد کلید و گواهی سرور https

  1. به روشی مشابه، یک کلید خصوصی RSA-2048 برای سرور ایجاد می کنیم که من آن را Server Key نامیدم.
  2. هنگام ایجاد یک گواهی، انتخاب می کنیم که گواهی سرور باید با گواهی CA امضا شود.
  3. انتخاب را فراموش نکنید SHA-256.
  4. ما به عنوان یک الگو انتخاب می کنیم [پیش‌فرض] HTTPS_server. کلیک کنید همه را به کار ببر.
  5. سپس روی زبانه موضوع کلید ما را انتخاب کرده و فیلدهای مورد نیاز را پر کنید.

احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

کلید و گواهی را برای کاربر ایجاد کنید

  1. کلید خصوصی کاربر در توکن ما ذخیره می شود. برای کار با آن، باید کتابخانه PKCS#11 را از وب سایت ما نصب کنید. برای توزیع های محبوب، ما بسته های آماده را توزیع می کنیم که در اینجا قرار دارد - https://www.rutoken.ru/support/download/pkcs/. ما همچنین مجموعه هایی برای arm64، armv7el، armv7hf، e2k، mipso32el داریم که می توانند از SDK ما دانلود شوند - https://www.rutoken.ru/developers/sdk/. علاوه بر اسمبلی برای لینوکس، مجموعه هایی برای macOS، freebsd و اندروید نیز وجود دارد.
  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 به عنوان نوع کلید انتخاب می کنیم. من این کلید را Client Key نامیدم.

    احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

  7. کد پین را وارد کنید. و ما منتظر تکمیل تولید سخت افزار جفت کلید هستیم

    احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

  8. ما یک گواهی برای کاربر با قیاس با گواهی سرور ایجاد می کنیم. این بار یک قالب را انتخاب می کنیم [پیش‌فرض] HTTPS_client و فراموش نکنید که کلیک کنید همه را به کار ببر.
  9. در برگه موضوع اطلاعات مربوط به کاربر را وارد کنید ما به درخواست ذخیره گواهی برای توکن پاسخ مثبت می دهیم.

در نتیجه، در برگه گواهینامه ها در XCA شما باید چیزی شبیه به این دریافت کنید.

احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس
این حداقل مجموعه کلیدها و گواهی ها برای شروع راه اندازی خود سرورها کافی است.

برای پیکربندی، باید گواهی CA، گواهی سرور و کلید خصوصی سرور را صادر کنیم.

برای انجام این کار، ورودی مورد نظر را در تب مربوطه در XCA انتخاب کرده و کلیک کنید صادرات.

Nginx

من نحوه نصب و اجرای سرور 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_depth - عمق جستجو را برای گواهی ریشه قابل اعتماد در زنجیره تعریف می کند. از آنجایی که گواهی مشتری ما بلافاصله در گواهی ریشه امضا می شود، عمق روی 1 تنظیم می شود. اگر گواهی کاربر در یک CA میانی امضا شده باشد، باید 2 در این پارامتر مشخص شود و غیره.
  • ssl_client_certificate - مسیر گواهی ریشه قابل اعتماد را مشخص می کند که هنگام بررسی اعتماد به گواهی کاربر استفاده می شود.
  • ssl_certificate/ssl_certificate_key - مسیر گواهی سرور/کلید خصوصی را مشخص کنید.

فراموش نکنید که nginx -t را اجرا کنید تا بررسی کنید که هیچ غلط املایی در پیکربندی وجود نداشته باشد و همه فایل‌ها در جای مناسب قرار داشته باشند و غیره.

و این همه است! همانطور که می بینید، راه اندازی بسیار ساده است.

بررسی اینکه در فایرفاکس کار می کند

از آنجایی که ما همه چیز را به طور کامل در لینوکس انجام می دهیم، فرض می کنیم که کاربران ما در لینوکس نیز کار می کنند (اگر ویندوز دارند، پس دستورالعمل راه اندازی مرورگرها را در مقاله قبلی ببینید.

  1. بیایید فایرفاکس را راه اندازی کنیم.
  2. بیایید ابتدا سعی کنیم بدون رمز وارد شوید. ما این تصویر را دریافت می کنیم:

    احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

  3. ما ادامه می دهیم درباره: تنظیمات # حریم خصوصی، و ما به دستگاه های امنیتی …
  4. فشار می دهیم باربرای اضافه کردن یک درایور دستگاه PKCS#11 جدید و تعیین مسیر به librtpkcs11ecp.so ما.
  5. برای بررسی اینکه گواهی قابل مشاهده است، می توانید به مدیر گواهینامه. از شما خواسته می شود که پین ​​خود را وارد کنید. پس از ورودی صحیح، می توانید آنچه را که در برگه است بررسی کنید گواهی های شما گواهی ما از توکن ظاهر شد.
  6. حالا بیایید با توکن برویم. فایرفاکس از شما می خواهد گواهینامه ای را انتخاب کنید که برای سرور انتخاب می شود. گواهی ما را انتخاب کنید

    احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

  7. سود!

    احراز هویت دو مرحله ای در سایت با استفاده از رمز USB. اکنون همچنین برای لینوکس

راه اندازی یک بار انجام می شود و همانطور که در پنجره درخواست گواهی می بینید، می توانیم انتخاب خود را ذخیره کنیم. پس از این، هر بار که وارد پورتال می‌شویم، فقط باید یک توکن وارد کنیم و پین کد کاربر را که در هنگام قالب‌بندی مشخص شده است وارد کنیم. پس از چنین احراز هویتی، سرور از قبل می‌داند که کدام کاربر وارد شده است و دیگر نمی‌توانید پنجره‌های اضافی برای تأیید ایجاد کنید، اما بلافاصله کاربر را به حساب شخصی خود اجازه دهید.

آپاچی

درست مانند nginx، هیچ کس نباید مشکلی در نصب آپاچی داشته باشد. اگر نمی دانید چگونه این وب سرور را نصب کنید، فقط از اسناد رسمی استفاده کنید.

و ما شروع به تنظیم 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. همانطور که می بینید، تنظیم احراز هویت دو مرحله ای در هر وب سرور، چه در ویندوز یا لینوکس، حداکثر یک ساعت است. و راه اندازی مرورگرها حدود 5 دقیقه طول می کشد. بسیاری از مردم فکر می کنند که راه اندازی و کار با احراز هویت دو مرحله ای دشوار و نامشخص است. امیدوارم مقاله ما حداقل کمی این افسانه را از بین ببرد.

فقط کاربران ثبت نام شده می توانند در نظرسنجی شرکت کنند. ورود، لطفا.

آیا به دستورالعمل هایی برای تنظیم TLS با گواهینامه ها مطابق با GOST 34.10-2012 نیاز دارید:

  • بله، TLS-GOST بسیار ضروری است

  • نه، تنظیم با الگوریتم های GOST جالب نیست

44 کاربر رای دادند. 9 کاربر رای ممتنع دادند.

منبع: www.habr.com

اضافه کردن نظر