
U govorili smo o važnosti dvostruke autentifikacije na korporativnim portalima kompanija. Prošli put smo pokazali kako postaviti sigurnu autentifikaciju na web-serveru IIS.
U komentarima su nas zamolili da napišemo upute za najčešće korištene web-servere na Linuxu — nginx i Apache.
Niste tražili — mi smo napisali.
Što je potrebno za početak?
- Bilo koja moderna Linux distribucija. Izvrsio sam testnu konfiguraciju na MX Linux 18.2_x64. To svakako nije server distribucija, ali za Debian će teško biti nekih razlika. Za druge distribucije putanje do biblioteka i konfiguracija mogu se malo razlikovati.
- Token. Nastavljamo koristiti model , koji idealno odgovara po brzinskim karakteristikama za korporativnu primjenu.
- Za rad s tokenom na Linuxu potrebno je instalirati sljedeće pakete:
libccid libpcsclite1 pcscd pcsc-tools opensc

Izdavanje certifikata
U prethodnim člancima oslanjali smo se na to da će se certifikati servera i klijenata izdavati pomoću Microsoft CA. No, kako postavljamo sve na Linuxu, tako ćemo objasniti alternativni način izdavanja tih certifikata — ne napuštajući Linux.
Kao CA koristit ćemo XCA (), koji je dostupan u svakoj modernoj distribuciji Linuxa. Sve radnje koje ćemo obavljati u XCA mogu se izvršiti i u naredbenom retku pomoću alata OpenSSL i pkcs11-tool, ali radi veće jednostavnosti i preglednosti u ovom članku ih nećemo navoditi.
Početak rada
- Instaliramo:
$ apt-get install xca - I pokrećemo:
$ xca - Stvaramo našu bazu podataka za CA — /root/CA.xdb
Preporučujemo pohranu baze podataka Certificate Authority u mapu kojoj pristup ima samo administrator. Ovo je važno za zaštitu privatnih ključeva korijenskih certifikata koji se koriste za potpisivanje svih ostalih certifikata.
Stvaramo ključeve i certifikat root CA
U osnovi infrastrukture javnih ključeva (PKI) leži hijerarhijski sustav. Glavni u ovom sustavu je korijenska certifikacijska agencija ili root CA. Njegov certifikat trebamo stvoriti kao prvi.
- Stvaramo za CA privatni ključ RSA-2048. Za to na kartici Privatni ključevi kliknite Novi ključ i odabiremo odgovarajući tip.
- Postavljamo ime za novi ključni par. Nazvao sam ga — CA Ključ.
- Izdajemo sam CA certifikat koristeći kreirani par ključeva. U tu svrhu prelazimo na karticu Certifikati i pritisnemo Novi certifikat.
- Obavezno odabiremo SHA-256, jer korištenje SHA-1 više ne može biti smatrano sigurnim.
- Kao predložak obavezno odabiremo [default] CA. Ne zaboravite pritisnuti Primijeni sve, inače predložak neće biti primijenjen.
- Na kartici Predmet odabiremo naš par ključeva. Tamo možete ispuniti sve osnovne podatke certifikata.

Kreiramo ključeve i certifikat za https poslužitelj
- Na sličan način kreiramo privatni ključ RSA-2048 za server, nazvao sam ga - Server Key.
- Prilikom kreiranja certifikata odabiremo da certifikat servera treba biti potpisan certifikatom CA.
- Ne zaboravite odabrati SHA-256.
- Kao predložak odabiremo [default] HTTPS_server. Kliknemo na Primijeni sve.
- Nakon čega na kartici Predmet odabiremo naš ključ i ispunjavamo potrebne podatke.

Kreiramo ključeve i certifikat za korisnika
- Privatni ključ korisnika bit će pohranjen na našem tokenu. Za rad s njim potrebno je instalirati PKCS#11 biblioteku s naše stranice. Za popularne distribucije distribuiramo gotove pakete, koji se nalaze ovdje - . Također imamo verzije za arm64, armv7el, armv7hf, e2k, mipso32el, koje možete pronaći u našem SDK - . Osim verzija za linux, postoji i verzija za macOS, freebsd i android.
- Dodajemo novog PKCS#11 Provider u XCA. U tu svrhu biramo iz menija Opcije na kartici PKCS#11 Provider.
- Kliknemo Dodati i odabiremo put do biblioteke PKCS#11. U mom slučaju to je usrliblibrtpkcs11ecp.so.
- Trebamo formatirani token RUTOKEN EDC PKI. Preuzimamo alat rtAdmin -
- Izvršavamo
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u - Kao tip ključa biramo - ključ RSA-2048 na RUTOKEN EDC PKI. Nazvao sam ovaj ključ Client Key.

- Unosimo PIN-kod. I čekamo završetak hardverske generacije para ključeva

- Certifikat za korisnika kreiramo analogno certifikatu servera. Ovaj put odabiremo predložak [default] HTTPS_client i ne zaboravljamo pritisnuti Primijeni sve.
- Na kartici Predmet unosimo informacije o korisniku. Na upit o čuvanju certifikata na tokenu odgovaramo potvrdno.
Na kraju, na kartici Certifikati u XCA treba izgledati otprilike ovako.

Ova minimalna postava ključeva i certifikata dovoljna je da započnemo s postavljanjem servera.
Za postavljanje potrebno je izvesti certifikat CA, certifikat servera i privatni ključ servera.
Za to je potrebno odabrati odgovarajući unos na odgovarajućoj kartici u XCA i pritisnuti Izvesti.
Nginx
Neću pisati kako instalirati i pokrenuti nginx-server — na tu temu ima dovoljno članaka na internetu, a da ne govorim o službenoj dokumentaciji. Odmah ćemo preći na postavke HTTPS-a i dvostruke autentifikacije putem tokena.
Dodajemo sljedeće retke u sekciju server 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 postavke ssl u nginx-u može se pronaći ovdje —
Ja ću samo ukratko opisati one koje sam sam postavio:
- ssl_verify_client — ukazuje da je potrebno provjeriti lanac povjerenja za certifikat.
- ssl_verify_depth — određuje dubinu pretrage pouzdane korijenske certifikate u lancu. Budući da je naš korisnički certifikat odmah potpisan na korijenskom certifikatu, dubina je postavljena na 1. Ako je certifikat korisnika potpisan na posredničkom CA-u, tada treba navesti 2 u ovom parametru, i tako dalje.
- ssl_client_certificate — ukazuje put do pouzdane korijenske certifikacije koja se koristi pri provjeri povjerenja do korisničkog certifikata.
- ssl_certificate/ssl_certificate_key — ukazuju put do certifikata/privatnog ključa servera.
Ne zaboravite izvršiti nginx -t kako biste provjerili da u konfiguraciji nema tipfelera, a svi datoteke su na pravim mjestima i tako dalje.
I zapravo, to je sve! Kao što vidite, postavka je vrlo jednostavna.
Provjeravamo rad u Firefoxu
Budući da sve potpuno radimo u Linuxu, smatrat ćemo da i naši korisnici koriste Linux (ako imaju Windows, onda .
- Pokrećemo Firefox.
- Pokušat ćemo prvo ući bez tokena. Dobivamo ovakvu sliku:

- Idemo na about:preferences#privacy, i idemo u Security Devices…
- Kliknemo Load, kako bismo dodali novi PKCS#11 uređaj i navodimo put do naše librtpkcs11ecp.so.
- Za provjeru da li certifikat postoji, može se otići u Certificate Manager. Pojavit će se zahtjev za unos PIN koda. Nakon pravilnog unosa možete provjeriti da li je na kartici Your Certificates pojavila naš certifikat s tokena.
- Sada se prijavljujemo s tokenom. Firefox nudi izbor certifikata koji će biti odabran na serveru. Biramo naš certifikat.

- PROFIT!

Postavke se izvršavaju samo jednom, a kao što se može vidjeti u prozoru za zahtjev za certifikat, možemo sačuvati naš odabir. Nakon toga, pri svakom ulasku na portal, trebamo samo unijeti token i PIN kod korisnika koji je postavljen prilikom formatiranja. Nakon takve autentifikacije, server već zna koji se korisnik prijavio i više ne trebamo otvarati dodatna okna za provjeru, nego odmah pustiti korisnika u njegov osobni račun.
Apache
Baš kao i kod nginx, ne bi smjelo biti problema s instalacijom apachea. Ako ne znate kako instalirati ovaj web server, jednostavno se poslužite službenom dokumentacijom.
Sada prelazimo na postavljanje našeg HTTPS-a i dvofaktorske autentifikacije:
- Prvo je potrebno aktivirati mod_ssl:
$ a2enmod ssl - Zatim uključujemo zadan HTTPS postavke za stranicu:
$ a2ensite default-ssl - Sada uređujemo konfiguracijski fajl: /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 10Kao što vidite, nazivi parametara gotovo se poklapaju s nazivima parametara u nginx-u, tako da ih neću dodatno objašnjavati. Opet, tko je zainteresiran za detalje — dobrodošli u dokumentaciju.
Sada ponovo pokrećemo naš server:$ service apache2 reload $ service apache2 restart
Kao što vidite, postavljanje dvofaktorske autentifikacije na bilo kojem web serveru, bilo na Windows-u ili Linux-u, potraje najviše jedan sat. A postavljanje preglednika traje oko 5 minuta. Mnogi misle da je postavljanje i rad s dvofaktorskom autentifikacijom komplicirano i nerazumljivo. Nadam se da naš članak barem malo razbija ovaj mit.
Samo registrirani korisnici mogu sudjelovati u anketi. , molimo.
Treba li upute za postavljanje TLS-a s certifikatima prema GOST 34.10-2012:
Da, TLS-GOST je veoma potreban
Ne, postavljanje s GOST-algoritmima nije zanimljivo
Glasalo je 44 korisnika. Suzdržano 9 korisnika.
Izvor: habr.com





