Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux
В unul dintre articolele noastre anterioare am vorbit despre importanța autentificării cu doi factori pe portalurile corporative ale companiilor. Ultima dată am demonstrat cum să configurați autentificarea securizată pe serverul web IIS.

În comentarii, ni s-a cerut să scriem instrucțiuni pentru cele mai comune servere web pentru Linux - nginx și Apache.

Ai întrebat – am scris.

De ce ai nevoie pentru a începe?

  • Orice distribuție Linux modernă. Am făcut o configurare de testare pe MX Linux 18.2_x64. Desigur, aceasta nu este o distribuție de server, dar este puțin probabil să existe diferențe pentru Debian. Pentru alte distribuții, căile către bibliotecile de configurare pot varia ușor.
  • Jeton. Continuăm să folosim modelul Rutoken EDS PKI, care este ideal în ceea ce privește caracteristicile de viteză pentru uz corporativ.
  • Pentru a lucra cu un token în Linux, trebuie să instalați următoarele pachete:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

Eliberarea certificatelor

În articolele anterioare, ne-am bazat pe faptul că certificatele de server și client vor fi emise folosind Microsoft CA. Dar, deoarece configuram totul în Linux, vă vom spune și despre o modalitate alternativă de a emite aceste certificate - fără a părăsi Linux.
Vom folosi XCA ca CA (https://hohnstaedt.de/xca/), care este disponibil pe orice distribuție Linux modernă. Toate acțiunile pe care le vom efectua în XCA se pot face în modul linie de comandă folosind utilitatile OpenSSL și pkcs11-tool, dar pentru o mai mare simplitate și claritate, nu le vom prezenta în acest articol.

Noțiuni de bază

  1. Instalare:
    $ apt-get install xca
  2. Și alergăm:
    $ xca
  3. Ne creăm baza de date pentru CA - /root/CA.xdb
    Vă recomandăm să stocați baza de date a autorității de certificare într-un folder în care doar administratorul are acces. Acest lucru este important pentru a proteja cheile private ale certificatelor rădăcină, care sunt folosite pentru a semna toate celelalte certificate.

Creați chei și certificat CA rădăcină

O infrastructură cu cheie publică (PKI) se bazează pe un sistem ierarhic. Principalul lucru în acest sistem este autoritatea de certificare rădăcină sau CA rădăcină. Certificatul său trebuie creat mai întâi.

  1. Creăm o cheie privată RSA-2048 pentru CA. Pentru a face acest lucru, pe fila Cheile private Apăsați Cheie nouă și selectați tipul potrivit.
  2. Setați un nume pentru noua pereche de chei. L-am numit CA Key.
  3. Emitem certificatul CA în sine, folosind perechea de chei creată. Pentru a face acest lucru, accesați fila certificate și faceți clic pe Certificat nou.
  4. Asigurați-vă că alegeți SHA-256, deoarece utilizarea SHA-1 nu mai poate fi considerată sigură.
  5. Asigurați-vă că alegeți ca șablon [implicit]CA. Nu uitați să faceți clic pe Aplica tot, altfel șablonul nu este aplicat.
  6. În filă Subiect alegeți perechea noastră de chei. Acolo puteți completa toate câmpurile principale ale certificatului.

Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

Creați chei și un certificat de server https

  1. Într-un mod similar, creăm o cheie privată RSA-2048 pentru server, am numit-o Cheia server.
  2. La crearea unui certificat, selectăm ca certificatul de server să fie semnat cu un certificat CA.
  3. Nu uitați să selectați SHA-256.
  4. Alegem ca șablon [implicit] HTTPS_server. Click pe Aplica tot.
  5. Apoi pe filă Subiect selectați cheia noastră și completați câmpurile obligatorii.

Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

Creați chei și certificat pentru utilizator

  1. Cheia privată a utilizatorului va fi stocată pe tokenul nostru. Pentru a lucra cu acesta, trebuie să instalați biblioteca PKCS#11 de pe site-ul nostru web. Pentru distribuțiile populare, distribuim pachete gata făcute, care se află aici - https://www.rutoken.ru/support/download/pkcs/. Avem și ansambluri pentru arm64, armv7el, armv7hf, e2k, mipso32el, care pot fi descărcate de pe SDK-ul nostru - https://www.rutoken.ru/developers/sdk/. Pe lângă ansambluri pentru Linux, există și ansambluri pentru macOS, freebsd și Android.
  2. Adăugarea unui nou furnizor PKCS#11 la XCA. Pentru a face acest lucru, accesați meniul Opţiuni la filă Furnizor PKCS#11.
  3. Apăsăm Adăuga și selectați calea către biblioteca PKCS#11. În cazul meu este usrliblibrtpkcs11ecp.so.
  4. Vom avea nevoie de un token Rutoken EDS PKI formatat. Descărcați utilitarul rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Realizăm
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Selectăm cheia RSA-2048 pentru Rutoken EDS PKI ca tip de cheie. Am numit această cheie Cheie client.

    Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

  7. Introdu codul PIN. Și așteptăm finalizarea generării hardware a perechii de chei

    Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

  8. Creăm un certificat pentru utilizator prin analogie cu certificatul serverului. De data aceasta selectăm un șablon [implicit] HTTPS_client și nu uitați să faceți clic Aplica tot.
  9. În filă Subiect introduceți informații despre utilizator. Răspundem afirmativ la cererea de salvare a certificatului pentru token.

Drept urmare, pe fila certificări în XCA ar trebui să obțineți așa ceva.

Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux
Acest set minim de chei și certificate este suficient pentru a începe configurarea serverelor în sine.

Pentru a configura, trebuie să exportăm certificatul CA, certificatul serverului și cheia privată a serverului.

Pentru a face acest lucru, selectați intrarea dorită în fila corespunzătoare din XCA și faceți clic Export.

nginx

Nu voi scrie cum să instalez și să rulez un server nginx - există suficiente articole pe acest subiect pe Internet, ca să nu mai vorbim de documentația oficială. Să trecem direct la configurarea HTTPS și a autentificării cu doi factori folosind un token.

Adăugați următoarele linii la secțiunea server în 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;
}

O descriere detaliată a tuturor parametrilor legați de configurarea ssl în nginx poate fi găsită aici - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Voi descrie doar pe scurt pe cei pe care mi-am întrebat:

  • ssl_verify_client - specifică faptul că lanțul de încredere pentru certificat trebuie verificat.
  • ssl_verify_depth - Definește adâncimea de căutare pentru certificatul rădăcină de încredere din lanț. Deoarece certificatul nostru client este semnat imediat pe certificatul rădăcină, adâncimea este setată la 1. Dacă certificatul de utilizator este semnat pe un CA intermediar, atunci trebuie specificat 2 în acest parametru și așa mai departe.
  • ssl_client_certificate - specifică calea către certificatul rădăcină de încredere, care este utilizată la verificarea încrederii în certificatul utilizatorului.
  • ssl_certificate/ssl_certificate_key - indică calea către certificatul de server/cheia privată.

Nu uitați să rulați nginx -t pentru a verifica dacă nu există greșeli de scriere în configurație și că toate fișierele sunt în locul potrivit și așa mai departe.

Și asta e tot! După cum puteți vedea, configurarea este foarte simplă.

Verificarea că funcționează în Firefox

Deoarece facem totul complet în Linux, vom presupune că utilizatorii noștri lucrează și în Linux (dacă au Windows, atunci consultați instrucțiunile pentru configurarea browserelor din articolul anterior.

  1. Să lansăm Firefox.
  2. Să încercăm mai întâi să ne conectăm fără un token. Obținem această imagine:

    Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

  3. Continuăm despre: preferințele # confidențialitate, și mergem la Dispozitive de securitate…
  4. Apăsăm A incarcapentru a adăuga un nou driver de dispozitiv PKCS#11 și pentru a specifica calea către librtpkcs11ecp.so.
  5. Pentru a verifica dacă certificatul este vizibil, puteți accesa Manager de certificate. Vi se va solicita să introduceți codul PIN. După introducerea corectă, puteți verifica ce este pe filă Certificatele dvs a apărut certificatul nostru din token.
  6. Acum să mergem cu jetonul. Firefox vă solicită să selectați un certificat care va fi selectat pentru server. Alegeți certificatul nostru.

    Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

  7. PROFIT!

    Autentificare cu doi factori pe site folosind un token USB. Acum și pentru Linux

Configurarea se face o singură dată și, după cum puteți vedea în fereastra de solicitare a certificatului, putem salva selecția noastră. După aceasta, de fiecare dată când ne logăm în portal, va trebui doar să introducem un token și să introducem codul PIN al utilizatorului care a fost specificat în timpul formatării. După o astfel de autentificare, serverul știe deja care utilizator s-a autentificat și nu mai puteți crea ferestre suplimentare pentru verificare, ci imediat lăsați utilizatorul să intre în contul său personal.

Apache

La fel ca în cazul nginx, nimeni nu ar trebui să aibă probleme la instalarea apache. Dacă nu știți cum să instalați acest server web, trebuie doar să utilizați documentația oficială.

Și începem să ne instalăm HTTPS și autentificarea cu doi factori:

  1. Mai întâi trebuie să activați mod_ssl:
    $ a2enmod ssl
  2. Și apoi activați setările implicite HTTPS ale site-ului:
    $ a2ensite default-ssl
  3. Acum edităm fișierul de configurare: /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

    După cum puteți vedea, numele parametrilor coincid practic cu numele parametrilor din nginx, așa că nu le voi explica. Din nou, oricine este interesat de detalii este binevenit la documentație.
    Acum repornim serverul nostru:

    $ service apache2 reload
    $ service apache2 restart

  4. După cum puteți vedea, configurarea autentificării cu doi factori pe orice server web, indiferent dacă este în Windows sau Linux, este o chestiune de maximum o oră. Iar configurarea browserelor durează aproximativ 5 minute. Mulți oameni cred că configurarea și lucrul cu autentificarea cu doi factori este dificilă și neclară. Sper că articolul nostru dezmintă acest mit, măcar puțin.

Numai utilizatorii înregistrați pot participa la sondaj. Loghează-te, Vă rog.

Aveți nevoie de instrucțiuni pentru configurarea TLS cu certificate conform GOST 34.10-2012:

  • Da, TLS-GOST este foarte necesar

  • Nu, reglarea cu algoritmi GOST nu este interesantă

Au votat 44 de utilizatori. 9 utilizatori s-au abținut.

Sursa: www.habr.com

Adauga un comentariu