Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux
В jedan od naših prethodnih članaka govorili smo o važnosti dvofaktorske autentifikacije na korporativnim portalima kompanija. Prošli put smo demonstrirali kako postaviti sigurnu autentifikaciju na IIS web serveru.

U komentarima smo zamoljeni da napišemo uputstva za najčešće web servere za Linux - nginx i Apache.

Pitali ste - napisali smo.

Šta vam je potrebno za početak?

  • Bilo koja moderna Linux distribucija. Uradio sam probno podešavanje na MX Linuxu 18.2_x64. Ovo naravno nije serverska distribucija, ali malo je vjerojatno da će biti ikakvih razlika za Debian. Za druge distribucije, staze do konfiguracijskih biblioteka mogu se neznatno razlikovati.
  • Token. Nastavljamo da koristimo model Rutoken EDS PKI, što je idealno u pogledu karakteristika brzine za korporativnu upotrebu.
  • Da biste radili sa tokenom u Linuxu, morate instalirati sljedeće pakete:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

Izdavanje sertifikata

U prethodnim člancima oslanjali smo se na činjenicu da će se certifikati servera i klijenta izdavati pomoću Microsoft CA. Ali budući da sve postavljamo u Linuxu, također ćemo vam reći o alternativnom načinu izdavanja ovih certifikata - bez napuštanja Linuxa.
Koristićemo XCA kao CA (https://hohnstaedt.de/xca/), koji je dostupan u bilo kojoj modernoj Linux distribuciji. Sve radnje koje ćemo izvoditi u XCA mogu se obaviti u načinu komandne linije pomoću alata OpenSSL i pkcs11, ali zbog veće jednostavnosti i jasnoće, nećemo ih predstavljati u ovom članku.

Prvi koraci

  1. Instaliraj:
    $ apt-get install xca
  2. I trčimo:
    $ xca
  3. Kreiramo našu bazu podataka za CA - /root/CA.xdb
    Preporučujemo pohranjivanje baze podataka Izdavača certifikata u fasciklu kojoj samo administrator ima pristup. Ovo je važno za zaštitu privatnih ključeva korijenskih certifikata, koji se koriste za potpisivanje svih ostalih certifikata.

Kreirajte ključeve i root CA certifikat

Infrastruktura javnog ključa (PKI) je zasnovana na hijerarhijskom sistemu. Glavna stvar u ovom sistemu je root certifikacijsko tijelo ili root CA. Prvo se mora kreirati njegov certifikat.

  1. Kreiramo RSA-2048 privatni ključ za CA. Da biste to učinili, na kartici Privatni ključevi nažimaem Novi ključ i odaberite odgovarajući tip.
  2. Postavite ime za novi par ključeva. Nazvao sam ga CA ključ.
  3. Izdajemo sam CA certifikat koristeći kreirani par ključeva. Da biste to učinili, idite na karticu Potvrde i guranje Novi certifikat.
  4. Obavezno izaberite SHA-256, jer se korištenje SHA-1 više ne može smatrati sigurnim.
  5. Obavezno odaberite kao predložak [podrazumevano] CA. Ne zaboravite kliknuti na Primijeni sve, inače se šablon ne primjenjuje.
  6. Na kartici Naslov odaberite naš par ključeva. Tamo možete popuniti sva glavna polja sertifikata.

Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

Kreiranje ključeva i certifikata https servera

  1. Na sličan način kreiramo RSA-2048 privatni ključ za server, ja sam ga nazvao Server Key.
  2. Prilikom kreiranja certifikata odabiremo da certifikat servera mora biti potpisan CA certifikatom.
  3. Ne zaboravite odabrati SHA-256.
  4. Mi biramo kao šablon [podrazumevano] HTTPS_server. Kliknite na Primijeni sve.
  5. Zatim na kartici Naslov odaberite naš ključ i popunite potrebna polja.

Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

Kreirajte ključeve i certifikat za korisnika

  1. Privatni ključ korisnika će biti pohranjen na našem tokenu. Da biste radili s njim, trebate instalirati biblioteku PKCS#11 sa naše web stranice. Za popularne distribucije distribuiramo gotove pakete, koji se nalaze ovdje - https://www.rutoken.ru/support/download/pkcs/. Imamo i sklopove za arm64, armv7el, armv7hf, e2k, mipso32el, koje možete preuzeti sa našeg SDK-a - https://www.rutoken.ru/developers/sdk/. Osim sklopova za Linux, postoje i sklopovi za macOS, freebsd i android.
  2. Dodavanje novog PKCS#11 provajdera u XCA. Da biste to učinili, idite na meni mogućnosti na karticu PKCS#11 Provajder.
  3. Kliknite dodati i izaberite putanju do PKCS#11 biblioteke. U mom slučaju to je usrliblibrtpkcs11ecp.so.
  4. Trebat će nam formatirani Rutoken EDS PKI token. Preuzmite uslužni program rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Mi izvršavamo
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Kao tip ključa biramo RSA-2048 ključ za Rutoken EDS PKI. Ovaj ključ sam nazvao klijentski ključ.

    Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

  7. Unesite PIN kod. I čekamo završetak hardverske generacije para ključeva

    Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

  8. Sertifikat za korisnika kreiramo po analogiji sa certifikatom servera. Ovaj put biramo šablon [podrazumevano] HTTPS_client i ne zaboravite da kliknete Primijeni sve.
  9. Na kartici Naslov unesite podatke o korisniku. Na zahtjev za spremanje certifikata za token odgovaramo potvrdno.

Kao rezultat, na kartici Sertifikati u XCA bi trebao dobiti ovako nešto.

Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux
Ovaj minimalni set ključeva i certifikata dovoljan je da započnete postavljanje samih servera.

Da bismo konfigurisali, potrebno je da izvezemo CA sertifikat, serverski sertifikat i privatni ključ servera.

Da biste to učinili, odaberite željeni unos na odgovarajućoj kartici u XCA i kliknite izvoz.

Nginx

Neću pisati kako instalirati i pokrenuti nginx server - na internetu ima dovoljno članaka o ovoj temi, a da ne spominjemo službenu dokumentaciju. Prijeđimo direktno na postavljanje HTTPS-a i dvofaktorske provjere autentičnosti pomoću tokena.

Dodajte sljedeće linije u odjeljak servera u 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;
}

Detaljan opis svih parametara koji se odnose na konfiguraciju ssl-a u nginxu možete pronaći ovdje - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Samo ću ukratko opisati one koje sam se pitao:

  • ssl_verify_client - specificira da lanac povjerenja za certifikat treba biti provjeren.
  • ssl_verify_depth - Definira dubinu pretrage za pouzdani korijenski certifikat u lancu. Budući da je naš klijentski certifikat odmah potpisan na korijenskom certifikatu, dubina je postavljena na 1. Ako je korisnički certifikat potpisan na srednjem CA, tada se u ovom parametru mora navesti 2 i tako dalje.
  • ssl_client_certificate - specificira putanju do pouzdanog korijenskog certifikata, koji se koristi prilikom provjere povjerenja u certifikat korisnika.
  • ssl_certificate/ssl_certificate_key - naznačite putanju do certifikata/privatnog ključa servera.

Ne zaboravite pokrenuti nginx -t da provjerite da nema grešaka u kucanju u konfiguraciji, da su sve datoteke na pravom mjestu itd.

I to je sve! Kao što vidite, podešavanje je vrlo jednostavno.

Provjeravam da li radi u Firefoxu

Pošto sve radimo u potpunosti u Linuxu, pretpostavit ćemo da i naši korisnici rade u Linuxu (ako imaju Windows, onda pogledajte upute za postavljanje pretraživača u prethodnom članku.

  1. Pokrenimo Firefox.
  2. Pokušajmo se prvo prijaviti bez tokena. Dobijamo ovu sliku:

    Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

  3. Idi o: preferencijama # privatnost, i idemo na Sigurnosni uređaji…
  4. Kliknite opterećenjeda dodate novi PKCS#11 upravljački program uređaja i odredite putanju do našeg librtpkcs11ecp.so.
  5. Da biste provjerili je li certifikat vidljiv, možete otići na Menadžer certifikata. Od vas će biti zatraženo da unesete svoj PIN. Nakon ispravnog unosa, možete provjeriti šta se nalazi na kartici Vaši sertifikati pojavio se naš certifikat iz tokena.
  6. Idemo sada sa žetonom. Firefox vas traži da odaberete certifikat koji će biti odabran za server. Odaberite naš certifikat.

    Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

  7. PROFIT!

    Dvofaktorska autentikacija na web lokaciji pomoću USB tokena. Sada i za Linux

Podešavanje se vrši jednom, i kao što možete vidjeti u prozoru zahtjeva za certifikatom, možemo sačuvati naš izbor. Nakon toga, svaki put kada se prijavimo na portal, trebat ćemo samo ubaciti token i unijeti korisnički PIN kod koji je naveden tokom formatiranja. Nakon takve autentifikacije, server već zna koji korisnik se prijavio i više ne možete kreirati dodatne prozore za verifikaciju, već odmah pustite korisnika na njegov lični nalog.

apaš

Baš kao i kod nginxa, niko ne bi trebao imati problema s instaliranjem apachea. Ako ne znate kako da instalirate ovaj web server, samo koristite zvaničnu dokumentaciju.

I počinjemo postavljati našu HTTPS i dvofaktorsku autentifikaciju:

  1. Prvo morate aktivirati mod_ssl:
    $ a2enmod ssl
  2. Zatim omogućite zadane HTTPS postavke stranice:
    $ a2ensite default-ssl
  3. Sada uređujemo konfiguracionu datoteku: /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

    Kao što vidite, nazivi parametara se praktički poklapaju sa nazivima parametara u nginxu, tako da ih neću objašnjavati. Opet, svi zainteresovani za detalje su dobrodošli u dokumentaciju.
    Sada ponovo pokrećemo naš server:

    $ service apache2 reload
    $ service apache2 restart

  4. Kao što vidite, postavljanje dvofaktorske autentifikacije na bilo kojem web serveru, bilo na Windowsu ili Linuxu, traje maksimalno jedan sat. A podešavanje pretraživača traje oko 5 minuta. Mnogi ljudi misle da je postavljanje i rad sa dvofaktorskom autentifikacijom teško i nejasno. Nadam se da će naš članak barem malo razotkriti ovaj mit.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Da li su vam potrebna uputstva za postavljanje TLS-a sa sertifikatima prema GOST 34.10-2012:

  • Da, TLS-GOST je veoma potreban

  • Ne, podešavanje sa GOST algoritmima nije zanimljivo

Glasalo je 44 korisnika. Uzdržano je bilo 9 korisnika.

izvor: www.habr.com

Dodajte komentar