USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham
Π’ oldingi maqolalarimizdan biri kompaniyalarning korporativ portallarida ikki faktorli autentifikatsiyaning ahamiyati haqida gaplashdik. Oxirgi marta biz IIS veb-serverida xavfsiz autentifikatsiyani qanday o'rnatishni ko'rsatdik.

Sharhlarda bizdan Linux uchun eng keng tarqalgan veb-serverlar - nginx va Apache uchun ko'rsatmalar yozishni so'rashdi.

Siz so'radingiz - biz yozdik.

Boshlash uchun nima kerak?

  • Har qanday zamonaviy Linux tarqatish. Men MX Linux 18.2_x64 da test o'rnatdim. Bu, albatta, server taqsimoti emas, lekin Debian uchun farqlar bo'lishi dargumon. Boshqa tarqatishlar uchun konfiguratsiya kutubxonalariga yo'llar biroz farq qilishi mumkin.
  • Token. Biz modeldan foydalanishda davom etamiz Rutoken EDS PKI, bu korporativ foydalanish uchun tezlik xarakteristikalari jihatidan ideal.
  • Linuxda token bilan ishlash uchun siz quyidagi paketlarni o'rnatishingiz kerak:
    libccid libpcsclite1 pcscd pcsc-vositalari opensc

USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

Sertifikatlarni berish

Oldingi maqolalarda biz server va mijoz sertifikatlari Microsoft CA yordamida chiqarilishiga tayandik. Ammo biz Linuxda hamma narsani o'rnatayotganimiz sababli, sizga ushbu sertifikatlarni Linuxdan chiqmasdan berishning muqobil usuli haqida ham aytib beramiz.
Biz XCA dan CA sifatida foydalanamiz (https://hohnstaedt.de/xca/), har qanday zamonaviy Linux distributivida mavjud. XCA-da biz bajaradigan barcha harakatlar OpenSSL va pkcs11-tool yordam dasturlari yordamida buyruq qatori rejimida bajarilishi mumkin, ammo soddaligi va ravshanligi uchun biz ularni ushbu maqolada keltirmaymiz.

Ishga kirishish

  1. O'rnatish:
    $ apt-get install xca
  2. Va biz yuguramiz:
    $ xca
  3. Biz CA - /root/CA.xdb uchun ma'lumotlar bazasini yaratamiz
    Sertifikat organi ma'lumotlar bazasini faqat administrator kirish huquqiga ega bo'lgan papkada saqlashni tavsiya etamiz. Bu boshqa barcha sertifikatlarni imzolash uchun ishlatiladigan ildiz sertifikatlarining shaxsiy kalitlarini himoya qilish uchun muhimdir.

Kalitlar va ildiz CA sertifikatini yarating

Ochiq kalitlar infratuzilmasi (PKI) ierarxik tizimga asoslangan. Ushbu tizimda asosiy narsa - ildiz sertifikatlash organi yoki ildiz CA. Avval uning sertifikati yaratilishi kerak.

  1. Biz CA uchun RSA-2048 shaxsiy kalitini yaratamiz. Buning uchun yorliqda Shaxsiy kalitlar najimaem Yangi kalit va tegishli turni tanlang.
  2. Yangi kalit juftligi uchun nom belgilang. Men uni CA Key deb nomladim.
  3. Biz yaratilgan kalit juftligidan foydalanib, CA sertifikatini o'zi chiqaramiz. Buning uchun yorliqga o'ting Sertifikatlar va bosing Yangi sertifikat.
  4. Tanlaganingizga ishonch hosil qiling SHA-256, chunki SHA-1 dan foydalanish endi xavfsiz deb hisoblanmaydi.
  5. Shablon sifatida tanlaganingizga ishonch hosil qiling [standart] CA. Bosishni unutmang Hammasini qo'llash, aks holda shablon qo'llanilmaydi.
  6. Yorliqda Libos ID raqamini kiriting kalit juftimizni tanlang. U erda siz sertifikatning barcha asosiy maydonlarini to'ldirishingiz mumkin.

USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

Kalitlar va https server sertifikatini yaratish

  1. Xuddi shunday, biz server uchun RSA-2048 shaxsiy kalitini yaratamiz, men uni Server kaliti deb nomladim.
  2. Sertifikat yaratishda biz server sertifikati CA sertifikati bilan imzolanishi kerakligini tanlaymiz.
  3. Tanlashni unutmang SHA-256.
  4. Biz shablon sifatida tanlaymiz [standart] HTTPS_server. ni bosing Hammasini qo'llash.
  5. Keyin yorliqda Libos ID raqamini kiriting kalitimizni tanlang va kerakli maydonlarni to'ldiring.

USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

Foydalanuvchi uchun kalit va sertifikat yarating

  1. Foydalanuvchining shaxsiy kaliti bizning tokenimizda saqlanadi. U bilan ishlash uchun veb-saytimizdan PKCS#11 kutubxonasini o'rnatishingiz kerak. Ommabop tarqatish uchun biz bu erda joylashgan tayyor paketlarni tarqatamiz - https://www.rutoken.ru/support/download/pkcs/. Shuningdek, bizda arm64, armv7el, armv7hf, e2k, mipso32el uchun yig'ilishlar mavjud, ularni bizning SDK-dan yuklab olish mumkin - https://www.rutoken.ru/developers/sdk/. Linux uchun yig'ilishlardan tashqari, macOS, freebsd va android uchun yig'ilishlar ham mavjud.
  2. XCA-ga yangi PKCS#11 provayderi qo'shilmoqda. Buning uchun menyuga o'ting Options tabga PKCS#11 provayderi.
  3. Biz bosamiz qo'shish va PKCS # 11 kutubxonasiga yo'lni tanlang. Mening holimda bu usrliblibrtpkcs11ecp.so.
  4. Bizga formatlangan Rutoken EDS PKI tokeni kerak bo'ladi. rtAdmin yordam dasturini yuklab oling - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Biz bajaramiz
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>
  6. Kalit turi sifatida Rutoken EDS PKI uchun RSA-2048 kalitini tanlaymiz. Men bu kalitni mijoz kaliti deb atadim.

    USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

  7. PIN kodni kiriting. Va biz kalit juftligining apparat ishlab chiqarish tugashini kutamiz

    USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

  8. Biz foydalanuvchi uchun server sertifikatiga o'xshash sertifikat yaratamiz. Bu safar biz shablonni tanlaymiz [standart] HTTPS_client va bosishni unutmang Hammasini qo'llash.
  9. Yorliqda Libos ID raqamini kiriting foydalanuvchi haqidagi ma'lumotlarni kiriting. Token uchun sertifikatni saqlash so'roviga ijobiy javob beramiz.

Natijada, yorliqda Sertifikat XCA'da siz shunga o'xshash narsalarni olishingiz kerak.

USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham
Ushbu minimal kalitlar va sertifikatlar to'plami serverlarning o'zlarini sozlashni boshlash uchun etarli.

Sozlash uchun biz CA sertifikati, server sertifikati va server shaxsiy kalitini eksport qilishimiz kerak.

Buni amalga oshirish uchun XCA-dagi tegishli yorliqda kerakli yozuvni tanlang va ustiga bosing Eksport.

nginx

Men nginx serverini qanday o'rnatish va ishga tushirishni yozmayman - rasmiy hujjatlarni hisobga olmaganda, Internetda ushbu mavzu bo'yicha etarlicha maqolalar mavjud. Keling, token yordamida HTTPS va ikki faktorli autentifikatsiyani o'rnatishga to'g'ri kelaylik.

Nginx.conf-dagi server bo'limiga quyidagi qatorlarni qo'shing:

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;
}

Nginx-da ssl-ni sozlash bilan bog'liq barcha parametrlarning batafsil tavsifini bu erda topishingiz mumkin - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Men o'zimdan so'raganlarimni qisqacha aytib beraman:

  • ssl_verify_client - sertifikat uchun ishonch zanjiri tekshirilishi kerakligini bildiradi.
  • ssl_verify_depth - zanjirdagi ishonchli ildiz sertifikati uchun qidiruv chuqurligini belgilaydi. Bizning mijoz sertifikatimiz darhol ildiz sertifikatida imzolanganligi sababli, chuqurlik 1 ga o'rnatiladi. Agar foydalanuvchi sertifikati oraliq CAda imzolangan bo'lsa, bu parametrda 2 ko'rsatilishi kerak va hokazo.
  • ssl_client_certificate - foydalanuvchi sertifikatiga ishonchni tekshirishda foydalaniladigan ishonchli ildiz sertifikatiga yo'lni belgilaydi.
  • ssl_certificate/ssl_certificate_key - server sertifikati/shaxsiy kalitiga yo'lni ko'rsating.

Konfiguratsiyada xatolar yo'qligini va barcha fayllar to'g'ri joyda ekanligini va hokazolarni tekshirish uchun nginx -t ni ishga tushirishni unutmang.

Va bu hammasi! Ko'rib turganingizdek, sozlash juda oddiy.

Firefox-da ishlayotganini tekshirish

Biz hamma narsani Linuxda to'liq bajarganimiz sababli, foydalanuvchilarimiz Linuxda ham ishlaydi deb taxmin qilamiz (agar ularda Windows bo'lsa, unda oldingi maqoladagi brauzerlarni sozlash bo'yicha ko'rsatmalarga qarang.

  1. Firefox-ni ishga tushiramiz.
  2. Keling, avval tokensiz kirishga harakat qilaylik. Biz ushbu rasmni olamiz:

    USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

  3. Ga o'ting haqida: imtiyozlar # maxfiylik, va biz boramiz Xavfsizlik qurilmalari…
  4. Biz bosamiz yukyangi PKCS#11 qurilma drayverini qo'shish va librtpkcs11ecp.so ga yo'lni belgilang.
  5. Sertifikatning ko'rinishini tekshirish uchun siz borishingiz mumkin Sertifikatlar menejeri. Sizdan PIN kodingizni kiritish so'raladi. To'g'ri kiritilgandan so'ng, yorliqda nima borligini tekshirishingiz mumkin Sizning sertifikatlaringiz tokendan sertifikatimiz paydo bo'ldi.
  6. Endi token bilan boraylik. Firefox server uchun tanlanadigan sertifikatni tanlashni taklif qiladi. Bizning sertifikatimizni tanlang.

    USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

  7. FOYDA!

    USB token yordamida saytda ikki faktorli autentifikatsiya. Endi Linux uchun ham

O'rnatish bir marta amalga oshiriladi va sertifikat so'rovi oynasida ko'rib turganingizdek, biz tanlovimizni saqlashimiz mumkin. Shundan so'ng, har safar portalga kirganimizda, biz faqat tokenni kiritishimiz va formatlash paytida ko'rsatilgan foydalanuvchi PIN kodini kiritishimiz kerak bo'ladi. Bunday autentifikatsiyadan so'ng server qaysi foydalanuvchi tizimga kirganligini allaqachon biladi va siz endi tekshirish uchun qo'shimcha oynalar yarata olmaysiz, lekin darhol foydalanuvchiga shaxsiy hisobiga kirishga ruxsat bering.

Apache

Xuddi nginx-da bo'lgani kabi, hech kim apache-ni o'rnatishda muammoga duch kelmasligi kerak. Agar siz ushbu veb-serverni qanday o'rnatishni bilmasangiz, rasmiy hujjatlardan foydalaning.

Va biz HTTPS va ikki faktorli autentifikatsiyani sozlashni boshlaymiz:

  1. Avval mod_ssl-ni faollashtirishingiz kerak:
    $ a2enmod ssl
  2. Va keyin saytning standart HTTPS sozlamalarini yoqing:
    $ a2ensite default-ssl
  3. Endi biz konfiguratsiya faylini tahrirlaymiz: /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

    Ko'rib turganingizdek, parametrlarning nomlari amalda nginx-dagi parametrlarning nomlari bilan mos keladi, shuning uchun men ularni tushuntirmayman. Shunga qaramay, tafsilotlarga qiziqqan har bir kishi hujjatlarga xush kelibsiz.
    Endi biz serverimizni qayta ishga tushiramiz:

    $ service apache2 reload
    $ service apache2 restart

  4. Ko'rib turganingizdek, har qanday veb-serverda ikki faktorli autentifikatsiyani o'rnatish Windows yoki Linuxda maksimal bir soat davom etadi. Va brauzerlarni sozlash taxminan 5 daqiqa davom etadi. Ko'p odamlar ikki faktorli autentifikatsiyani sozlash va ishlash qiyin va tushunarsiz deb o'ylashadi. Umid qilamanki, bizning maqolamiz bu afsonani, hech bo'lmaganda, bir oz yo'q qiladi.

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Sizga GOST 34.10-2012 bo'yicha sertifikatlar bilan TLSni o'rnatish bo'yicha ko'rsatmalar kerakmi:

  • Ha, TLS-GOST juda zarur

  • Yo'q, GOST algoritmlari bilan sozlash qiziq emas

44 foydalanuvchi ovoz berdi. 9 nafar foydalanuvchi betaraf qoldi.

Manba: www.habr.com

a Izoh qo'shish