
I berÀttade vi om vikten av tvÄfaktorsautentisering pÄ företagsportaler. I förra artikeln visade vi hur man stÀller in sÀker autentisering pÄ webservern IIS.
I kommentarsfĂ€ltet bad vĂ„ra lĂ€sare oss att skriva en handledning för de mest populĂ€ra webservrarna under Linux â nginx och Apache.
Ni bad â vi hörde.
Vad behövs för att komma igÄng?
- Vilken modern Linux-distribution som helst. Jag utförde en testinstÀllning i MX Linux 18.2_x64. Det Àr visserligen ingen serverdistribution, men för Debian lÀr det inte vara nÄgra större skillnader. För andra distributioner kan sökvÀgar till bibliotek och konfigurationsfiler variera nÄgot.
- Token. Vi fortsÀtter att anvÀnda modellen , som Àr perfekt anpassad för prestandan krav för företagsanvÀndning.
- För att arbeta med token i Linux mÄste följande paket installeras:
libccid libpcsclite1 pcscd pcsc-tools opensc

UtfÀrdande av certifikat
I tidigare artiklar har vi utgĂ„tt ifrĂ„n att server- och klientcertifikat utfĂ€rdas med Microsoft CA. Men eftersom vi stĂ€ller in allt i Linux, sĂ„ kommer vi Ă€ven att berĂ€tta om ett alternativt sĂ€tt att utfĂ€rda dessa certifikat â utan att lĂ€mna Linux.
Som CA kommer vi att anvÀnda XCA (), som Àr tillgÀnglig i alla moderna Linux-distributioner. Alla ÄtgÀrder som vi utför i XCA kan ocksÄ göras i kommandoradslÀge med hjÀlp av verktyg som OpenSSL och pkcs11-tool, men för större enkelhet och tydlighet kommer vi inte att ta med dem i denna artikel.
Komma igÄng
- Installera:
$ apt-get install xca - Och starta:
$ xca - Skapa vĂ„r databas för CA â /root/CA.xdb
Vi rekommenderar att du lagrar databasen för Certificate Authority i en mapp som endast administratören har tillgÄng till. Detta Àr viktigt för att skydda de privata nycklarna för rotcertifikaten, som anvÀnds för att signera alla andra certifikat.
Skapa nycklar och certifikat för root CA
I grunden för infrastrukturer för öppna nycklar (PKI) ligger ett hierarkiskt system. Det centrala i detta system Àr rotcertifikatscentret eller root CA. Dess certifikat mÄste skapas först.
- Skapa en privat nyckel RSA-2048 för CA. För detta gör vi det pÄ fliken Privata nycklar klicka pÄ Ny nyckel och vÀlj motsvarande typ.
- Ange ett namn för det nya nyckelparet. Jag kallade det â CA Key.
- Vi skriver ut sjÀlva CA-certifikatet med den skapade nyckelparet. För att göra det gÄr vi till fliken Certificates och klickar pÄ New Certificate.
- Viktigt att vi vÀljer SHA-256, eftersom anvÀndning av SHA-1 inte lÀngre kan anses sÀkert.
- Som mall vÀljer vi absolut [default] CA. Glöm inte att klicka pÄ Apply all, annars tillÀmpas inte mallen.
- PÄ fliken Subject vÀljer vi vÄrt nyckelpar. DÀr kan du ocksÄ fylla i alla viktiga fÀlt för certifikatet.

Vi skapar nycklar och certifikat för HTTPS-servern
- PĂ„ liknande sĂ€tt skapar vi en privat nyckel RSA-2048 för servern, jag kallade den â Server Key.
- Vid skapandet av certifikatet vÀljer vi att servercertifikatet behöver signeras av CA-certifikatet.
- Kom ihÄg att vÀlja SHA-256.
- Som mall vÀljer vi [default] HTTPS_server. Klicka pÄ Apply all.
- DÀrefter gÄr vi till fliken Subject vÀljer vÄr nyckel och fyller i nödvÀndiga fÀlt.

Vi skapar nycklar och certifikat för anvÀndaren
- Den privata nyckeln för anvĂ€ndaren kommer att lagras pĂ„ vĂ„r token. För att arbeta med den mĂ„ste vi installera PKCS#11-biblioteket frĂ„n vĂ„r webbplats. För populĂ€ra distributioner tillhandahĂ„ller vi fĂ€rdiga paket som finns hĂ€r â . Vi har ocksĂ„ byggnader för arm64, armv7el, armv7hf, e2k, mipso32el, som kan hĂ€mtas i vĂ„rt SDK â . Förutom byggnader för Linux finns det Ă€ven byggnader för macOS, freebsd och android.
- LÀgg till en ny PKCS#11-leverantör i XCA. För detta gÄr vi till menyn Options till fliken PKCS#11 Provider.
- Klicka pÄ Add och vÀlj sökvÀgen till PKCS#11-biblioteket. I mitt fall Àr det usrliblibrtpkcs11ecp.so.
- Vi behöver en formaterad Rootoken PKI-digital signaturtoken. Ladda ner verktyget rtAdmin â
- Kör
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u - Som nyckeltyp vĂ€ljer vi â RSA-2048-nyckel pĂ„ Rootoken PKI. Jag kallade denna nyckel Client Key.

- Ange PIN-koden. Och vÀnta pÄ att den hÄrdvarugenererade nyckelparet ska slutföras.

- Certifikatet för anvÀndaren skapas pÄ samma sÀtt som servercertifikatet. Denna gÄng vÀljer vi mallen [default] HTTPS_client och glöm inte att klicka pÄ Apply all.
- PÄ fliken Subject ange informationen om anvÀndaren. NÀr du ombeds att spara certifikatet pÄ token, svara bejakande.
Som resultat ska fliken Certificates i XCA se ut som bilden nedan.

Detta minimala set av nycklar och certifikat Àr tillrÀckligt för att börja konfigurera servrarna.
För att konfigurera behöver vi exportera certifikatet frÄn CA, servercertifikatet och serverns privata nyckel.
För detta behöver vi vÀlja den relevanta posten i den motsvarande fliken i XCA och trycka pÄ Exportera.
Nginx
Jag kommer inte att beskriva hur man installerar och kör en nginx-server â det finns tillrĂ€ckligt med artiklar pĂ„ internet om detta, för att inte tala om den officiella dokumentationen. Vi gĂ„r direkt till att konfigurera HTTPS och tvĂ„faktorsautentisering med token.
Vi lÀgger till följande rader i serversektionen i 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;
}Du kan hitta en detaljerad beskrivning av alla parametrar som rör ssl-konfiguration i nginx hĂ€r â
Jag kommer bara kort att beskriva de som jag sjÀlv har stÀllt in:
- ssl_verify_client â anger att certifikatets förtroendekedja mĂ„ste kontrolleras.
- ssl_verify_depth â bestĂ€mmer djupet för att hitta det betrodda rotcertifikatet i kedjan. Eftersom vĂ„rt klientcertifikat Ă€r direkt signerat av rotcertifikatet, sĂ€tts djupet till 1. Om anvĂ€ndarens certifikat signeras av ett mellanliggande CA, mĂ„ste detta parameter sĂ€ttas till 2, och sĂ„ vidare.
- ssl_client_certificate â anger sökvĂ€gen till det betrodda rotcertifikatet som anvĂ€nds vid kontroll av förtroendet för anvĂ€ndarens certifikat.
- ssl_certificate/ssl_certificate_key â anger sökvĂ€gen till certifikatet/den privata nyckeln för servern.
Kom ihÄg att köra nginx -t för att kontrollera att det inte finns nÄgra fel i konfigurationen och att alla filer ligger dÀr de ska.
Och det Àr faktiskt allt! Som ni ser Àr konfigurationen mycket enkel.
Vi testar funktionen i Firefox
Eftersom vi gör allt fullt ut i Linux, lÄt oss anta att vÄra anvÀndare ocksÄ arbetar i Linux (om de har Windows, sÄ .
- Vi startar Firefox.
- Vi försöker först gÄ in utan token. Vi fÄr den hÀr bilden:

- Vi gĂ„r till about:preferences#privacy, och gĂ„r till SĂ€kerhetsenheterâŠ
- Klicka pÄ Ladda, för att lÀgga till en ny PKCS#11-enhetsdrivrutin och anger sökvÀgen till vÄr librtpkcs11ecp.so.
- För att kontrollera att certifikatet syns kan vi gÄ till Certifikatadministratör. En begÀran om att ange PIN-koden visas. Efter att ha angett korrekt kan vi kontrollera att vÄrt certifikat med token har dykt upp pÄ fliken Dina certifikat .
- Nu loggar vi in med token. Firefox erbjuder att vÀlja ett certifikat som kommer att vÀljas pÄ servern. Vi vÀljer vÄrt certifikat.

- VINST!

InstÀllningen görs en gÄng, och som syns i fönstret för certifikatförfrÄgan kan vi spara vÄrt val. Efter detta behöver vi bara klistra in token och ange PIN-koden som stÀlldes in vid formateringen varje gÄng vi loggar in pÄ portalen. Efter denna autentisering vet servern redan vilken anvÀndare som har loggat in och vi behöver inte lÀngre göra nÄgra ytterligare fönster för verifiering, utan kan direkt slÀppa in anvÀndaren i sin personliga portal.
Apache
Precis som med nginx bör ingen ha problem med att installera apache. Om du inte vet hur man installerar denna webbserver, anvÀnd bara den officiella dokumentationen.
Nu börjar vi med att konfigurera vÄr HTTPS och tvÄfaktorsautentisering:
- Först mÄste vi aktivera mod_ssl:
$ a2enmod ssl - Och sedan aktivera standardinstÀllningarna för HTTPS-webbplatsen:
$ a2ensite default-ssl - Nu redigerar vi konfigurationsfilen: /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 10Som du kan se, Ă€r namnen pĂ„ parametrarna nĂ€stan identiska med namnen pĂ„ parametrarna i nginx, sĂ„ jag kommer inte att förklara dem. Ă terigen, för dem som Ă€r intresserade av detaljer â vĂ€lkomna till dokumentationen.
Nu startar vi om vÄr server:$ service apache2 reload $ service apache2 restart
Som du kan se, att stÀlla in tvÄfaktorsautentisering pÄ vilken webbserver som helst, bÄde Windows och Linux, tar högst en timme. Och konfigurationen av webblÀsare tar cirka 5 minuter. MÄnga anser att instÀllningen och arbetet med tvÄfaktorsautentisering Àr komplicerat och otydligt. Jag hoppas att vÄr artikel Ätminstone delvis avfÀrdar denna myt.
Endast registrerade anvÀndare kan delta i omröstningen. , tack.
Behöver du en instruktion för att stÀlla in TLS med certifikat baserat pÄ GOST 34.10-2012:
Ja, TLS-GOST Àr mycket behövligt
Nej, instÀllningen med GOST-algoritmer Àr inte intressant
44 anvÀndare röstade. 9 anvÀndare avstod.
KĂ€lla: habr.com





