Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux
В enega od naših prejšnjih člankov smo govorili o pomenu dvofaktorske avtentikacije na korporativnih portalih podjetij. Zadnjič smo pokazali, kako nastaviti varno avtentikacijo v spletnem strežniku IIS.

V komentarjih so nas prosili, da napišemo navodila za najpogostejša spletna strežnika za Linux - nginx in Apache.

Vprašali ste - pisali smo.

Kaj potrebujete za začetek?

  • Vsaka sodobna distribucija Linuxa. Opravil sem testno nastavitev na MX Linux 18.2_x64. To seveda ni strežniška distribucija, vendar za Debian verjetno ne bo nobenih razlik. Za druge distribucije se lahko poti do konfiguracijskih knjižnic nekoliko razlikujejo.
  • Žeton. Še naprej uporabljamo model Rutoken EDS PKI, ki je glede na hitrostne lastnosti idealen za korporativno uporabo.
  • Za delo z žetonom v Linuxu morate namestiti naslednje pakete:
    libccid libpcsclite1 pcscd pcsc-orodja opensc

Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

Izdajanje potrdil

V prejšnjih člankih smo se zanašali na dejstvo, da bodo certifikati strežnika in odjemalca izdani s pomočjo Microsoft CA. Ker pa vse nastavljamo v Linuxu, vam bomo povedali tudi o alternativnem načinu izdaje teh potrdil – ne da bi zapustili Linux.
Uporabili bomo XCA kot CA (https://hohnstaedt.de/xca/), ki je na voljo v kateri koli sodobni distribuciji Linuxa. Vsa dejanja, ki jih bomo izvedli v XCA, je mogoče izvesti v načinu ukazne vrstice z uporabo pripomočkov OpenSSL in pkcs11-tool, vendar jih zaradi večje preprostosti in jasnosti v tem članku ne bomo predstavili.

Začetek

  1. Namesti:
    $ apt-get install xca
  2. In tečemo:
    $ xca
  3. Ustvarimo našo zbirko podatkov za CA - /root/CA.xdb
    Priporočamo, da podatkovno bazo overitelja potrdil shranite v mapo, do katere ima dostop samo skrbnik. To je pomembno za zaščito zasebnih ključev korenskih potrdil, ki se uporabljajo za podpis vseh drugih potrdil.

Ustvarite ključe in korensko potrdilo CA

Infrastruktura javnih ključev (PKI) temelji na hierarhičnem sistemu. Glavna stvar v tem sistemu je korenski certifikacijski organ ali korenski CA. Najprej je treba ustvariti njegovo potrdilo.

  1. Ustvarimo zasebni ključ RSA-2048 za CA. Če želite to narediti, na zavihku Zasebni ključi potisnite New Key in izberite ustrezno vrsto.
  2. Nastavite ime za nov par ključev. Poimenoval sem ga CA Key.
  3. Izdamo samo potrdilo CA z uporabo ustvarjenega para ključev. Če želite to narediti, pojdite na zavihek Certifikati in kliknite Novo potrdilo.
  4. Bodite prepričani, da izberete SHA-256, ker uporaba SHA-1 ni več varna.
  5. Bodite prepričani, da izberete kot predlogo [privzeto]CA. Ne pozabite klikniti na Uporabi vse, sicer se predloga ne uporabi.
  6. V zavihku Zadeva izberite naš par ključev. Tam lahko izpolnite vsa glavna polja potrdila.

Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

Ustvarjanje ključev in certifikata strežnika https

  1. Na podoben način ustvarimo zasebni ključ RSA-2048 za strežnik, poimenoval sem ga Server Key.
  2. Pri kreiranju certifikata izberemo, da mora biti certifikat strežnika podpisan s CA certifikatom.
  3. Ne pozabite izbrati SHA-256.
  4. Izberemo kot predlogo [privzeto] HTTPS_strežnik. Kliknite na Uporabi vse.
  5. Nato na zavihku Zadeva izberite naš ključ in izpolnite zahtevana polja.

Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

Ustvarite ključe in potrdilo za uporabnika

  1. Zasebni ključ uporabnika bo shranjen na našem žetonu. Za delo z njim morate namestiti knjižnico PKCS#11 z našega spletnega mesta. Za priljubljene distribucije distribuiramo že pripravljene pakete, ki se nahajajo tukaj - https://www.rutoken.ru/support/download/pkcs/. Imamo tudi sklope za arm64, armv7el, armv7hf, e2k, mipso32el, ki jih lahko prenesete iz našega SDK - https://www.rutoken.ru/developers/sdk/. Poleg sklopov za Linux obstajajo tudi sklopi za macOS, freebsd in android.
  2. Dodajanje novega ponudnika PKCS#11 v XCA. Če želite to narediti, pojdite v meni možnosti na zavihek Ponudnik PKCS#11.
  3. Pritiskamo Dodaj in izberite pot do knjižnice PKCS#11. V mojem primeru je to usrliblibrtpkcs11ecp.so.
  4. Potrebovali bomo formatiran žeton Rutoken EDS PKI. Prenesite pripomoček rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Izvajamo
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Kot vrsto ključa izberemo ključ RSA-2048 za Rutoken EDS PKI. Ta ključ sem poimenoval Client Key.

    Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

  7. Vnesite kodo PIN. In počakamo na dokončanje strojne generacije para ključev

    Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

  8. Uporabniku izdelamo potrdilo po analogiji s strežniškim potrdilom. Tokrat izberemo predlogo [privzeto] HTTPS_client in ne pozabite klikniti Uporabi vse.
  9. V zavihku Zadeva vnesite podatke o uporabniku. Na zahtevo za shranjevanje potrdila za žeton odgovorimo pritrdilno.

Kot rezultat, na zavihku Potrdila v XCA bi morali dobiti nekaj takega.

Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux
Ta minimalni nabor ključev in potrdil zadostuje za začetek nastavitve samih strežnikov.

Za konfiguracijo moramo izvoziti potrdilo CA, potrdilo strežnika in zasebni ključ strežnika.

Če želite to narediti, izberite želeni vnos na ustreznem zavihku v XCA in kliknite izvoz.

Nginx

Ne bom pisal, kako namestiti in zagnati strežnik nginx - na internetu je dovolj člankov o tej temi, da ne omenjam uradne dokumentacije. Pojdimo naravnost k nastavitvi HTTPS in dvofaktorske avtentikacije z uporabo žetona.

Dodajte naslednje vrstice v razdelek strežnika v 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;
}

Podroben opis vseh parametrov, povezanih s konfiguracijo ssl v nginx, najdete tukaj - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Na kratko bom opisal le tiste, ki sem jih sam vprašal:

  • ssl_verify_client - določa, da je treba preveriti verigo zaupanja za potrdilo.
  • ssl_verify_depth – Določa globino iskanja za zaupanja vredno korensko potrdilo v verigi. Ker je potrdilo našega odjemalca takoj podpisano na korenskem potrdilu, je globina nastavljena na 1. Če je uporabniško potrdilo podpisano na vmesni CA, mora biti v tem parametru podano 2 in tako naprej.
  • ssl_client_certificate - podaja pot do zaupanja vrednega korenskega potrdila, ki se uporablja pri preverjanju zaupanja v potrdilo uporabnika.
  • ssl_certificate/ssl_certificate_key - navedite pot do potrdila/zasebnega ključa strežnika.

Ne pozabite zagnati nginx -t, da preverite, ali v konfiguraciji ni tipkarskih napak in ali so vse datoteke na pravem mestu itd.

In to je vse! Kot lahko vidite, je nastavitev zelo preprosta.

Preverjanje, ali deluje v Firefoxu

Ker vse delamo popolnoma v Linuxu, bomo predvidevali, da tudi naši uporabniki delajo v Linuxu (če imajo Windows, potem glejte navodila za nastavitev brskalnikov v prejšnjem članku.

  1. Zaženimo Firefox.
  2. Poskusimo se najprej prijaviti brez žetona. Dobimo to sliko:

    Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

  3. Pojdimo na o: nastavitvah # zasebnost, in gremo na Varnostne naprave…
  4. Pritiskamo Obremenitevda dodate nov gonilnik naprave PKCS#11 in določite pot do našega librtpkcs11ecp.so.
  5. Če želite preveriti, ali je potrdilo vidno, lahko obiščete potrdilo direktor. Pozvani boste, da vnesete PIN. Po pravilnem vnosu lahko preverite, kaj je na zavihku Vaši certifikati pojavilo se je naše potrdilo iz žetona.
  6. Zdaj pa pojdimo z žetonom. Firefox vas pozove, da izberete potrdilo, ki bo izbrano za strežnik. Izberite naš certifikat.

    Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

  7. DOBIČEK!

    Dvostopenjska avtentikacija na spletnem mestu z uporabo žetona USB. Zdaj tudi za Linux

Nastavitev se izvede enkrat in kot lahko vidite v oknu zahteve za potrdilo, lahko naš izbor shranimo. Nato bomo morali ob vsaki prijavi v portal vstaviti le žeton in vnesti uporabniško PIN kodo, ki smo jo določili pri formatiranju. Po takšni avtentikaciji strežnik že ve, kateri uporabnik se je prijavil in ne morete več ustvarjati dodatnih oken za verifikacijo, temveč uporabnika takoj spustite v njegov osebni račun.

Apache

Tako kot pri nginxu tudi pri namestitvi apachea nihče ne bi smel imeti težav. Če ne veste, kako namestiti ta spletni strežnik, preprosto uporabite uradno dokumentacijo.

In začnemo nastavljati naš HTTPS in dvofaktorsko avtentikacijo:

  1. Najprej morate aktivirati mod_ssl:
    $ a2enmod ssl
  2. Nato omogočite privzete nastavitve HTTPS spletnega mesta:
    $ a2ensite default-ssl
  3. Zdaj uredimo konfiguracijsko datoteko: /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

    Kot lahko vidite, imena parametrov praktično sovpadajo z imeni parametrov v nginxu, zato jih ne bom razlagal. Še enkrat, vsi, ki vas zanimajo podrobnosti, dobrodošli v dokumentaciji.
    Zdaj znova zaženemo naš strežnik:

    $ service apache2 reload
    $ service apache2 restart

  4. Kot lahko vidite, nastavitev dvostopenjske avtentikacije na katerem koli spletnem strežniku, bodisi v sistemu Windows ali Linux, traja največ eno uro. In nastavitev brskalnikov traja približno 5 minut. Mnogi ljudje mislijo, da je nastavitev in delo z dvofaktorsko avtentikacijo težko in nejasno. Upam, da bo naš članek ta mit vsaj malo razblinil.

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Ali potrebujete navodila za nastavitev TLS s certifikati po GOST 34.10-2012:

  • Da, TLS-GOST je zelo potreben

  • Ne, uglaševanje z algoritmi GOST ni zanimivo

Glasovalo je 44 uporabnikov. 9 uporabnikov se je vzdržalo.

Vir: www.habr.com

Dodaj komentar