USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де

USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де
В алдыңғы мақалаларымыздың бірі біз компаниялардың корпоративтік порталдарында екі факторлы аутентификацияның маңыздылығы туралы айттық. Өткен жолы біз IIS веб-серверінде қауіпсіз аутентификацияны қалай орнату керектігін көрсеттік.

Түсініктемелерде бізден Linux үшін ең көп таралған веб-серверлер - nginx және Apache үшін нұсқауларды жазуды сұрады.

Сіз сұрадыңыз - біз жаздық.

Бастау үшін сізге не қажет?

  • Кез келген заманауи Linux дистрибуциясы. Мен MX Linux 18.2_x64 жүйесінде сынақ орнатуды жасадым. Бұл, әрине, сервер тарату емес, бірақ Debian үшін ешқандай айырмашылықтар болуы екіталай. Басқа таратулар үшін конфигурация кітапханаларына апаратын жолдар сәл өзгеше болуы мүмкін.
  • Токен. Біз үлгіні пайдалануды жалғастырамыз Rutoken EDS PKI, бұл корпоративтік пайдалану үшін жылдамдық сипаттамалары бойынша өте қолайлы.
  • Linux жүйесінде таңбалауышпен жұмыс істеу үшін келесі пакеттерді орнату қажет:
    libccid libpcsclite1 pcscd pcsc-құралдар opensc

USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де

Сертификаттарды беру

Алдыңғы мақалаларда біз сервер мен клиент сертификаттары Microsoft CA арқылы шығарылатынына сендік. Бірақ біз Linux жүйесінде барлығын реттеп жатқандықтан, біз сізге бұл сертификаттарды Linux жүйесінен шықпай-ақ берудің балама жолы туралы айтып береміз.
Біз XCA-ны CA ретінде қолданамыз (https://hohnstaedt.de/xca/), ол кез келген заманауи Linux дистрибутивінде қол жетімді. XCA-да орындайтын барлық әрекеттерді пәрмен жолы режимінде OpenSSL және pkcs11-құрал утилиталары арқылы орындауға болады, бірақ қарапайымдылық пен түсінікті болу үшін біз оларды осы мақалада көрсетпейміз.

Жұмысты бастау

  1. Орнату:
    $ apt-get install xca
  2. Ал біз жүгіреміз:
    $ xca
  3. Біз CA үшін дерекқорды жасаймыз - /root/CA.xdb
    Сертификаттау орталығы дерекқорын тек әкімші қол жеткізе алатын қалтада сақтауды ұсынамыз. Бұл барлық басқа сертификаттарға қол қою үшін пайдаланылатын түбірлік сертификаттардың жеке кілттерін қорғау үшін маңызды.

Кілттерді және түбірлік CA сертификатын жасаңыз

Ашық кілттер инфрақұрылымы (PKI) иерархиялық жүйеге негізделген. Бұл жүйедегі ең бастысы - түбірлік сертификаттау органы немесе түбірлік CA. Алдымен оның сертификаты жасалуы керек.

  1. Біз CA үшін RSA-2048 жеке кілтін жасаймыз. Мұны істеу үшін қойындыда Жеке кілттер Басыңыз Жаңа кілт және сәйкес түрін таңдаңыз.
  2. Жаңа кілттер жұбына атау орнатыңыз. Мен оны CA Key деп атадым.
  3. Біз жасалған кілттер жұбын пайдалана отырып, CA сертификатының өзін шығарамыз. Мұны істеу үшін қойындыға өтіңіз Сертификаттар және нұқыңыз Жаңа сертификат.
  4. Таңдауды ұмытпаңыз SHA-256, өйткені SHA-1 пайдалану енді қауіпсіз деп саналмайды.
  5. Үлгі ретінде таңдауды ұмытпаңыз [әдепкі]CA. Басуды ұмытпаңыз Барлығын қолданыңыз, әйтпесе үлгі қолданылмайды.
  6. Қойындыда пән кілттер жұбымызды таңдаңыз. Онда сіз сертификаттың барлық негізгі өрістерін толтыра аласыз.

USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де

Кілттер мен https сервер сертификатын жасау

  1. Сол сияқты біз сервер үшін RSA-2048 жеке кілтін жасаймыз, мен оны Сервер кілті деп атадым.
  2. Куәлікті жасау кезінде біз сервер сертификатына CA сертификатымен қол қою керектігін таңдаймыз.
  3. Таңдауды ұмытпаңыз SHA-256.
  4. Үлгі ретінде таңдаймыз [әдепкі] HTTPS_сервері. Басыңыз Барлығын қолданыңыз.
  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. XCA жүйесіне жаңа PKCS#11 провайдерін қосу. Мұны істеу үшін мәзірге өтіңіз Опциялар қойындысына 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. Біз кілт түрі ретінде Rutoken EDS PKI үшін RSA-2048 кілтін таңдаймыз. Мен бұл кілтті Клиент кілті деп атадым.

    USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де

  7. PIN кодын енгізіңіз. Біз кілттер жұбының аппараттық генерациясының аяқталуын күтеміз

    USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де

  8. Біз пайдаланушы үшін сервер сертификатына ұқсас сертификат жасаймыз. Бұл жолы біз үлгіні таңдаймыз [әдепкі] HTTPS_client және басуды ұмытпаңыз Барлығын қолданыңыз.
  9. Қойындыда пән пайдаланушы туралы ақпаратты енгізіңіз. Токенге сертификатты сақтау туралы өтінішке оң жауап береміз.

Нәтижесінде қойындыда Сертификаттар XCA-да сіз осындай нәрсені алуыңыз керек.

USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де
Бұл кілттер мен сертификаттардың ең аз жинағы серверлерді орнатуды бастау үшін жеткілікті.

Конфигурациялау үшін бізге 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;
}

Nginx жүйесінде ssl конфигурациялауға қатысты барлық параметрлердің толық сипаттамасын мына жерден табуға болады - 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 іске қосуды ұмытпаңыз.

Және бұл бәрі! Көріп отырғаныңыздай, орнату өте қарапайым.

Firefox-та жұмыс істеп тұрғанын тексеру

Біз барлығын толығымен Linux жүйесінде жасайтындықтан, пайдаланушыларымыз Linux жүйесінде де жұмыс істейді деп есептейміз (егер оларда Windows болса, онда алдыңғы мақаладағы шолғыштарды орнату нұсқауларын қараңыз.

  1. Firefox-ты іске қосайық.
  2. Алдымен токенсіз кіруге тырысайық. Біз мына суретті аламыз:

    USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де

  3. Жалғастырамыз туралы: қалаулар # құпиялылық, және біз барамыз Қауіпсіздік құрылғылары…
  4. басамыз жүкжаңа PKCS#11 құрылғы драйверін қосу және librtpkcs11ecp.so жолын көрсету үшін.
  5. Куәліктің көрінетінін тексеру үшін мына мекенжайға өтуге болады Сертификат менеджері. Сізден PIN кодын енгізу сұралады. Дұрыс енгізгеннен кейін қойындыда не бар екенін тексеруге болады Сіздің сертификаттарыңыз жетоннан біздің сертификат пайда болды.
  6. Енді жетонмен жүрейік. Firefox сервер үшін таңдалатын сертификатты таңдауды ұсынады. Біздің сертификатты таңдаңыз.

    USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де

  7. PROFIT!

    USB таңбалауышы арқылы сайтта екі факторлы аутентификация. Енді Linux үшін де

Орнату бір рет орындалады және сертификатты сұрау терезесінде көріп отырғаныңыздай, таңдауымызды сақтай аламыз. Осыдан кейін, біз порталға кірген сайын, бізге тек таңбалауышты енгізу және пішімдеу кезінде көрсетілген пайдаланушы PIN кодын енгізу қажет болады. Мұндай аутентификациядан кейін сервер қай пайдаланушының жүйеге кіргенін біледі және сіз бұдан былай тексеру үшін ешқандай қосымша терезе жасай алмайсыз, бірақ пайдаланушыға өзінің жеке кабинетіне дереу рұқсат беріңіз.

Apache

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 минутты алады. Көптеген адамдар екі факторлы аутентификацияны орнату және жұмыс істеу қиын және түсініксіз деп ойлайды. Біздің мақала осы мифті, кем дегенде, аздап жоққа шығарады деп үміттенемін.

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Сізге ГОСТ 34.10-2012 сәйкес сертификаттары бар TLS орнату нұсқаулары қажет пе:

  • Иә, TLS-ГОСТ өте қажет

  • Жоқ, ГОСТ алгоритмдерімен баптау қызық емес

44 қолданушы дауыс берді. 9 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру