Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux
В een van ons vorige artikels ons het gepraat oor die belangrikheid van twee-faktor-verifikasie op korporatiewe portale van maatskappye. Verlede keer het ons gedemonstreer hoe om veilige verifikasie in die IIS-webbediener op te stel.

In die opmerkings is ons gevra om instruksies te skryf vir die mees algemene webbedieners vir Linux - nginx en Apache.

Jy het gevra - ons het geskryf.

Wat het jy nodig om te begin?

  • Enige moderne Linux verspreiding. Ek het 'n toetsopstelling op MX Linux 18.2_x64 gedoen. Dit is natuurlik nie 'n bedienerverspreiding nie, maar dit is onwaarskynlik dat daar enige verskille vir Debian sal wees. Vir ander verspreidings kan die paaie na die konfigurasiebiblioteke effens verskil.
  • Teken. Ons gaan voort om die model te gebruik Rutoken EDS PKI, wat ideaal is in terme van spoedeienskappe vir korporatiewe gebruik.
  • Om met 'n teken in Linux te werk, moet jy die volgende pakkette installeer:
    libccid libpcsclite1 pcscd pcsc-nutsmiddels openc

Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

Uitreiking van sertifikate

In vorige artikels het ons staatgemaak op die feit dat bediener- en kliëntsertifikate met Microsoft CA uitgereik sal word. Maar aangesien ons alles in Linux opstel, sal ons jou ook vertel van 'n alternatiewe manier om hierdie sertifikate uit te reik - sonder om Linux te verlaat.
Ons sal XCA as CA gebruik (https://hohnstaedt.de/xca/), wat beskikbaar is op enige moderne Linux-verspreiding. Al die aksies wat ons in XCA sal uitvoer, kan in die opdragreëlmodus gedoen word met behulp van die OpenSSL- en pkcs11-gereedskapnutsprogramme, maar vir groter eenvoud en duidelikheid sal ons dit nie in hierdie artikel aanbied nie.

Aan die slag

  1. Installeer:
    $ apt-get install xca
  2. En ons hardloop:
    $ xca
  3. Ons skep ons databasis vir CA - /root/CA.xdb
    Ons beveel aan om die Sertifikaat-owerheid-databasis in 'n vouer te stoor waar slegs die administrateur toegang het. Dit is belangrik om die private sleutels van die wortelsertifikate te beskerm, wat gebruik word om alle ander sertifikate te onderteken.

Skep sleutels en wortel CA-sertifikaat

'n Publieke sleutelinfrastruktuur (PKI) is gebaseer op 'n hiërargiese stelsel. Die belangrikste ding in hierdie stelsel is die wortelsertifiseringsowerheid of wortel-CA. Sy sertifikaat moet eers geskep word.

  1. Ons skep 'n RSA-2048 private sleutel vir die CA. Om dit te doen, op die blad Privaat sleutels druk Nuwe sleutel en kies die toepaslike tipe.
  2. Stel 'n naam vir die nuwe sleutelpaar. Ek het dit CA Key genoem.
  3. Ons reik die CA-sertifikaat self uit, deur die geskepte sleutelpaar te gebruik. Om dit te doen, gaan na die oortjie sertifikate en druk Nuwe sertifikaat.
  4. Maak seker om te kies SHA-256, want die gebruik van SHA-1 kan nie meer as veilig beskou word nie.
  5. Maak seker dat jy as 'n sjabloon kies [verstek] CA. Moenie vergeet om op te klik nie Pas alles toe, anders word die sjabloon nie toegepas nie.
  6. In die oortjie Onderwerp kies ons sleutelpaar. Daar kan jy al die hoofvelde van die sertifikaat invul.

Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

Skep sleutels en 'n https-bedienersertifikaat

  1. Op 'n soortgelyke manier skep ons 'n RSA-2048 private sleutel vir die bediener, ek het dit Server Key genoem.
  2. Wanneer 'n sertifikaat geskep word, kies ons dat die bedienersertifikaat met 'n CA-sertifikaat onderteken moet word.
  3. Moenie vergeet om te kies nie SHA-256.
  4. Ons kies as 'n sjabloon [verstek] HTTPS_bediener. Klik op Pas alles toe.
  5. Dan op die blad Onderwerp kies ons sleutel en vul die vereiste velde in.

Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

Skep sleutels en sertifikaat vir die gebruiker

  1. Die gebruiker se private sleutel sal op ons token gestoor word. Om daarmee te werk, moet jy die PKCS#11-biblioteek vanaf ons webwerf installeer. Vir gewilde verspreidings, versprei ons klaargemaakte pakkette, wat hier geleë is - https://www.rutoken.ru/support/download/pkcs/. Ons het ook samestellings vir arm64, armv7el, armv7hf, e2k, mipso32el, wat van ons SDK afgelaai kan word - https://www.rutoken.ru/developers/sdk/. Benewens samestellings vir Linux, is daar ook samestellings vir macOS, freebsd en Android.
  2. Voeg 'n nuwe PKCS#11-verskaffer by XCA. Om dit te doen, gaan na die spyskaart Opsies na die blad PKCS#11 Verskaffer.
  3. Ons druk Voeg en kies die pad na die PKCS#11-biblioteek. In my geval is dit usrliblibrtpkcs11ecp.so.
  4. Ons sal 'n geformateerde Rutoken EDS PKI-token benodig. Laai die rtAdmin-hulpprogram af - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Ons voer uit
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Ons kies die RSA-2048-sleutel vir die Rutoken EDS PKI as die sleuteltipe. Ek het hierdie sleutel Client Key genoem.

    Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

  7. Voer die PIN-kode in. En ons wag vir die voltooiing van hardeware-generering van die sleutelpaar

    Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

  8. Ons skep 'n sertifikaat vir die gebruiker in analogie met die bedienersertifikaat. Hierdie keer kies ons 'n sjabloon [verstek] HTTPS_kliënt en moenie vergeet om te klik nie Pas alles toe.
  9. In die oortjie Onderwerp voer inligting oor die gebruiker in. Ons antwoord bevestigend op die versoek om die sertifikaat vir die teken te stoor.

As gevolg hiervan, op die blad Sertifikate in XCA behoort jy so iets te kry.

Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux
Hierdie minimum stel sleutels en sertifikate is genoeg om die bedieners self te begin opstel.

Om te konfigureer, moet ons die CA-sertifikaat, bedienersertifikaat en bediener private sleutel uitvoer.

Om dit te doen, kies die verlangde inskrywing op die ooreenstemmende oortjie in XCA en klik uitvoer.

Nginx

Ek sal nie skryf hoe om 'n nginx-bediener te installeer en te laat loop nie - daar is genoeg artikels oor hierdie onderwerp op die internet, om nie eens te praat van die amptelike dokumentasie nie. Kom ons gaan reguit na die opstel van HTTPS en twee-faktor-verifikasie met behulp van 'n teken.

Voeg die volgende reëls by die bedienerafdeling in 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;
}

'N Gedetailleerde beskrywing van alle parameters wat verband hou met die konfigurasie van ssl in nginx kan hier gevind word - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Ek sal net kortliks diegene beskryf wat ek myself afgevra het:

  • ssl_verify_client - spesifiseer dat die vertrouesketting vir die sertifikaat geverifieer moet word.
  • ssl_verify_depth - Definieer die soekdiepte vir die vertroude wortelsertifikaat in die ketting. Aangesien ons kliëntsertifikaat onmiddellik op die wortelsertifikaat onderteken is, word die diepte op 1 gestel. As die gebruikersertifikaat op 'n intermediêre CA onderteken is, moet 2 in hierdie parameter gespesifiseer word, ensovoorts.
  • ssl_client_certificate - spesifiseer die pad na die vertroude wortelsertifikaat, wat gebruik word wanneer vertroue in die gebruiker se sertifikaat nagegaan word.
  • ssl_certificate/ssl_certificate_key - dui die pad na die bedienersertifikaat/privaatsleutel aan.

Moenie vergeet om nginx -t uit te voer om seker te maak dat daar geen tikfoute in die konfigurasie is nie, en dat alle lêers op die regte plek is, ensovoorts.

En dis al! Soos u kan sien, is die opstelling baie eenvoudig.

Kyk of dit in Firefox werk

Aangesien ons alles volledig in Linux doen, sal ons aanvaar dat ons gebruikers ook in Linux werk (as hulle Windows het, dan sien instruksies vir die opstel van blaaiers in die vorige artikel.

  1. Kom ons begin Firefox.
  2. Kom ons probeer eers sonder 'n teken aanmeld. Ons kry hierdie prentjie:

    Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

  3. Ons gaan aan oor: voorkeure # privaatheid, en ons gaan na Sekuriteitstoestelle …
  4. Ons druk vragom 'n nuwe PKCS#11-toestelbestuurder by te voeg en die pad na ons librtpkcs11ecp.so te spesifiseer.
  5. Om seker te maak dat die sertifikaat sigbaar is, kan jy gaan na Sertifikaatbestuurder. Jy sal gevra word om jou PIN in te voer. Na korrekte invoer, kan jy kyk wat op die blad is U sertifikate ons sertifikaat van die teken verskyn.
  6. Kom ons gaan nou met die teken. Firefox vra jou om 'n sertifikaat te kies wat vir die bediener gekies sal word. Kies ons sertifikaat.

    Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

  7. WINS!

    Twee-faktor-verifikasie op die webwerf met 'n USB-token. Nou ook vir Linux

Die opstelling word een keer gedoen, en soos u in die sertifikaatversoekvenster kan sien, kan ons ons keuse stoor. Hierna, elke keer as ons by die portaal aanmeld, hoef ons net 'n teken in te voeg en die gebruiker-PIN-kode in te voer wat tydens formatering gespesifiseer is. Na so verifikasie weet die bediener reeds watter gebruiker ingeteken het en jy kan nie meer enige bykomende vensters vir verifikasie skep nie, maar die gebruiker dadelik by sy persoonlike rekening inlaat.

Apache

Net soos met nginx, behoort niemand enige probleme te hê om Apache te installeer nie. As jy nie weet hoe om hierdie webbediener te installeer nie, gebruik net die amptelike dokumentasie.

En ons begin ons HTTPS en twee-faktor-verifikasie opstel:

  1. Eerstens moet jy mod_ssl aktiveer:
    $ a2enmod ssl
  2. En aktiveer dan die werf se verstek HTTPS-instellings:
    $ a2ensite default-ssl
  3. Nou wysig ons die konfigurasielêer: /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

    Soos u kan sien, stem die name van die parameters feitlik saam met die name van die parameters in nginx, so ek sal dit nie verduidelik nie. Weereens, enigiemand wat belangstel in die besonderhede is welkom by die dokumentasie.
    Nou begin ons ons bediener weer:

    $ service apache2 reload
    $ service apache2 restart

  4. Soos u kan sien, neem die opstel van twee-faktor-verifikasie op enige webbediener, hetsy op Windows of Linux, 'n maksimum van een uur. En die opstel van blaaiers neem ongeveer 5 minute. Baie mense dink dat dit moeilik en onduidelik is om met tweefaktor-verifikasie op te stel en te werk. Ek hoop ons artikel ontplof hierdie mite, ten minste 'n bietjie.

Slegs geregistreerde gebruikers kan aan die opname deelneem. Meld aan, asseblief.

Het jy instruksies nodig vir die opstel van TLS met sertifikate volgens GOST 34.10-2012:

  • Ja, TLS-GOST is baie nodig

  • Nee, instel met GOST-algoritmes is nie interessant nie

44 gebruikers het gestem. 9 gebruikers het buite stemming gebly.

Bron: will.com

Voeg 'n opmerking