Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux
В jedan od naših prethodnih članaka razgovarali smo o važnosti dvofaktorske autentifikacije na korporativnim portalima tvrtki. Zadnji put smo demonstrirali kako postaviti sigurnu autentifikaciju na IIS web poslužitelju.

U komentarima su nas zamolili da napišemo upute za najčešće web poslužitelje za Linux - nginx i Apache.

Pitali ste - napisali smo.

Što vam je potrebno za početak?

  • Svaka moderna distribucija Linuxa. Napravio sam probno postavljanje na MX Linux 18.2_x64. Ovo naravno nije distribucija poslužitelja, ali malo je vjerojatno da će biti ikakvih razlika za Debian. Za druge distribucije, putevi do konfiguracijskih biblioteka mogu se malo razlikovati.
  • Znak. Nastavljamo koristiti model Rutoken EDS PKI, što je idealno u smislu brzinskih karakteristika za korporativnu upotrebu.
  • Za rad s tokenom u Linuxu morate instalirati sljedeće pakete:
    libccid libpcsclite1 pcscd pcsc-alati opensc

Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

Izdavanje potvrda

U prethodnim člancima oslanjali smo se na činjenicu da će se certifikati poslužitelja 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.
Koristit ćemo XCA kao CA (https://hohnstaedt.de/xca/), koji je dostupan u svakoj modernoj distribuciji Linuxa. Sve radnje koje ćemo izvesti u XCA mogu se izvršiti u načinu naredbenog retka pomoću uslužnih programa OpenSSL i pkcs11-tool, ali zbog veće jednostavnosti i jasnoće, nećemo ih predstaviti u ovom članku.

Početak

  1. Instalirati:
    $ apt-get install xca
  2. I trčimo:
    $ xca
  3. Mi stvaramo našu bazu podataka za CA - /root/CA.xdb
    Preporučamo pohranjivanje baze podataka Izdavača certifikata u mapu 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.

Stvorite ključeve i korijenski CA certifikat

Infrastruktura javnih ključeva (PKI) temelji se na hijerarhijskom sustavu. Glavna stvar u ovom sustavu je root certifikacijsko tijelo ili root CA. Prvo se mora izraditi njegov certifikat.

  1. Mi stvaramo RSA-2048 privatni ključ za CA. Da biste to učinili, na kartici Privatni ključevi nažimaem Novi Key i odaberite odgovarajuću vrstu.
  2. Postavite naziv za novi par ključeva. Nazvao sam ga CA Key.
  3. Sam CA certifikat izdajemo pomoću kreiranog para ključeva. Da biste to učinili, idite na karticu Potvrde i kliknite Nova potvrda.
  4. Obavezno odaberite SHA-256, jer se korištenje SHA-1 više ne može smatrati sigurnim.
  5. Obavezno odaberite kao predložak [zadano]CA. Ne zaboravite kliknuti na Primijeni sve, inače se predložak ne primjenjuje.
  6. U kartici Predmet odaberite naš par ključeva. Tamo možete ispuniti sva glavna polja potvrde.

Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

Izrada ključeva i certifikata https poslužitelja

  1. Na sličan način stvaramo RSA-2048 privatni ključ za poslužitelj, nazvao sam ga Ključ poslužitelja.
  2. Prilikom izrade certifikata odabiremo da certifikat poslužitelja mora biti potpisan CA certifikatom.
  3. Ne zaboravite odabrati SHA-256.
  4. Odabiremo kao predložak [zadano] HTTPS_poslužitelj. Kliknite na Primijeni sve.
  5. Zatim na tab Predmet odaberite naš ključ i ispunite potrebna polja.

Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

Stvorite ključeve i certifikat za korisnika

  1. Privatni ključ korisnika bit će pohranjen na našem tokenu. Da biste radili s njim, trebate instalirati biblioteku PKCS#11 s naše web stranice. Za popularne distribucije, distribuiramo gotove pakete, koji se nalaze ovdje - https://www.rutoken.ru/support/download/pkcs/. Također imamo sklopove za arm64, armv7el, armv7hf, e2k, mipso32el, koji se mogu preuzeti s našeg SDK-a - https://www.rutoken.ru/developers/sdk/. Osim sklopova za Linux, tu su i sklopovi za macOS, freebsd i android.
  2. Dodavanje novog PKCS#11 davatelja u XCA. Da biste to učinili, idite na izbornik Opcije na karticu PKCS#11 davatelj.
  3. Pritišćemo dodati i odaberite stazu do biblioteke PKCS#11. 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. Odabrali smo ključ RSA-2048 za Rutoken EDS PKI kao tip ključa. Ovaj sam ključ nazvao Ključ klijenta.

    Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

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

    Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

  8. Izrađujemo certifikat za korisnika po analogiji s certifikatom poslužitelja. Ovaj put odabiremo predložak [zadano] HTTPS_klijent i ne zaboravi kliknuti Primijeni sve.
  9. U kartici Predmet unos podataka o korisniku. Na zahtjev za spremanje certifikata za token odgovaramo potvrdno.

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

Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux
Ovaj minimalni skup ključeva i certifikata dovoljan je za početak postavljanja samih poslužitelja.

Za konfiguraciju moramo izvesti CA certifikat, certifikat poslužitelja i privatni ključ poslužitelja.

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 poslužitelj - na Internetu ima dovoljno članaka o ovoj temi, a da ne spominjem službenu dokumentaciju. Prijeđimo odmah na postavljanje HTTPS-a i dvofaktorske autentifikacije pomoću tokena.

Dodajte sljedeće retke u odjeljak poslužitelja 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 vezanih uz 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 sebi postavio:

  • ssl_verify_client - navodi da se lanac povjerenja za certifikat treba provjeriti.
  • ssl_verify_depth - Definira dubinu pretraživanja za provjereni 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 2 mora biti navedeno u ovom parametru, i tako dalje.
  • ssl_client_certificate - specificira put do provjerenog korijenskog certifikata, koji se koristi prilikom provjere povjerenja u certifikat korisnika.
  • ssl_certificate/ssl_certificate_key - označava put do certifikata/privatnog ključa poslužitelja.

Ne zaboravite pokrenuti nginx -t da provjerite da nema grešaka pri upisu u konfiguraciji i da su sve datoteke na pravom mjestu, i tako dalje.

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

Provjeravam radi li u Firefoxu

Budući da sve radimo u potpunosti u Linuxu, pretpostavit ćemo da i naši korisnici rade u Linuxu (ako imaju Windows, onda pogledajte upute za postavljanje preglednika u prethodnom članku.

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

    Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

  3. Idemo dalje o: preferencije # privatnosti, i idemo na Sigurnosni uređaji…
  4. Pritišćemo Opterećenjeda biste dodali novi PKCS#11 upravljački program uređaja i odredili put do našeg librtpkcs11ecp.so.
  5. Da biste provjerili je li certifikat vidljiv, možete otići na potvrda Manager. Od vas će se tražiti da unesete svoj PIN. Nakon ispravnog unosa, možete provjeriti što je na kartici Vaši certifikati pojavio se naš certifikat iz tokena.
  6. Sada idemo s žetonom. Firefox od vas traži da odaberete certifikat koji će biti odabran za poslužitelj. Odaberite naš certifikat.

    Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

  7. DOBIT!

    Dvofaktorska autentifikacija na stranici pomoću USB tokena. Sada i za Linux

Postavljanje se vrši jednom, a kao što možete vidjeti u prozoru zahtjeva za certifikatom, možemo spremiti naš odabir. Nakon toga, pri svakoj prijavi na portal trebat ćemo samo umetnuti token i unijeti korisnički PIN kod koji je naveden prilikom formatiranja. Nakon takve autentifikacije poslužitelj već zna koji se korisnik prijavio i više ne možete kreirati dodatne prozore za provjeru, već odmah pustiti korisnika na njegov osobni račun.

apaš

Baš kao i kod nginxa, nitko ne bi trebao imati problema s instaliranjem apachea. Ako ne znate kako instalirati ovaj web poslužitelj, samo koristite službenu dokumentaciju.

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

  1. Prvo morate aktivirati mod_ssl:
    $ a2enmod ssl
  2. Zatim omogućite zadane HTTPS postavke stranice:
    $ a2ensite default-ssl
  3. Sada uređujemo konfiguracijsku 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 praktički se podudaraju s nazivima parametara u nginxu, pa ih neću objašnjavati. Opet, svi zainteresirani za detalje dobrodošli su u dokumentaciju.
    Sada ponovno pokrećemo naš poslužitelj:

    $ service apache2 reload
    $ service apache2 restart

  4. Kao što vidite, postavljanje dvofaktorske provjere autentičnosti na bilo kojem web poslužitelju, bilo na Windowsu ili Linuxu, traje maksimalno jedan sat. A postavljanje preglednika traje oko 5 minuta. Mnogi ljudi misle da je postavljanje i rad s dvofaktorskom autentifikacijom teško i nejasno. Nadam se da će naš članak barem malo razotkriti ovaj mit.

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Trebate li upute za postavljanje TLS-a s certifikatima prema GOST 34.10-2012:

  • Da, TLS-GOST je vrlo potreban

  • Ne, podešavanje s GOST algoritmima nije zanimljivo

Glasovalo je 44 korisnika. Suzdržano je bilo 9 korisnika.

Izvor: www.habr.com

Dodajte komentar