ProHoster > blog > administratie > Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux
Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux
В een van onze eerdere artikelen we hadden het over het belang van tweefactorauthenticatie op bedrijfsportals van bedrijven. De vorige keer hebben we gedemonstreerd hoe u veilige authenticatie instelt op de IIS-webserver.
In de reacties werd ons gevraagd instructies te schrijven voor de meest voorkomende webservers voor Linux: nginx en Apache.
Je vroeg het - we schreven.
Wat heb je nodig om te beginnen?
Elke moderne Linux-distributie. Ik heb een testopstelling gedaan op MX Linux 18.2_x64. Dit is uiteraard geen serverdistributie, maar het is onwaarschijnlijk dat er voor Debian verschillen zullen zijn. Voor andere distributies kunnen de paden naar de configuratiebibliotheken enigszins verschillen.
Token. Wij blijven het model gebruiken Rutoken EDS PKI, wat qua snelheidseigenschappen ideaal is voor zakelijk gebruik.
Om met een token in Linux te werken, moet je de volgende pakketten installeren:
libccid libpcsclite1 pcscd pcsc-tools opensc
Het uitgeven van certificaten
In eerdere artikelen vertrouwden we op het feit dat server- en clientcertificaten worden uitgegeven met behulp van Microsoft CA. Maar omdat we alles in Linux opzetten, vertellen we je ook over een alternatieve manier om deze certificaten uit te geven - zonder Linux te verlaten.
We zullen XCA gebruiken als CA (https://hohnstaedt.de/xca/), dat beschikbaar is op elke moderne Linux-distributie. Alle acties die we in XCA zullen uitvoeren, kunnen in de opdrachtregelmodus worden uitgevoerd met behulp van de hulpprogramma's OpenSSL en pkcs11, maar voor meer eenvoud en duidelijkheid zullen we ze in dit artikel niet presenteren.
Aan de slag
Installeren:
$ apt-get install xca
En wij rennen:
$ xca
We maken onze database voor CA - /root/CA.xdb
Wij raden u aan de database van de certificaatautoriteit op te slaan in een map waar alleen de beheerder toegang toe heeft. Dit is belangrijk om de privésleutels van de rootcertificaten te beschermen, die worden gebruikt om alle andere certificaten te ondertekenen.
Maak sleutels en een root-CA-certificaat
Een publieke sleutelinfrastructuur (PKI) is gebaseerd op een hiërarchisch systeem. Het belangrijkste in dit systeem is de rootcertificeringsinstantie of root-CA. Het certificaat moet eerst worden aangemaakt.
We maken een RSA-2048 privésleutel voor de CA. Om dit te doen, op het tabblad Privésleutels ажимаем New Key en selecteer het juiste type.
Stel een naam in voor het nieuwe sleutelpaar. Ik noemde het CA Key.
Het CA-certificaat geven wij zelf uit, met behulp van het aangemaakte sleutelpaar. Ga hiervoor naar het tabblad Certificaten en druk op Nieuw certificaat.
Zorg ervoor dat u kiest SHA-256, omdat het gebruik van SHA-1 niet langer als veilig kan worden beschouwd.
Zorg ervoor dat u als sjabloon kiest [standaard] CA. Vergeet niet op te klikken Alles toepassen, anders wordt de sjabloon niet toegepast.
Op het tabblad Onderwerp kies ons sleutelpaar. Daar kunt u alle hoofdvelden van het certificaat invullen.
Sleutels en een https-servercertificaat aanmaken
Op een vergelijkbare manier creëren we een RSA-2048 privésleutel voor de server, ik noemde deze Serversleutel.
Bij het aanmaken van een certificaat selecteren we dat het servercertificaat ondertekend moet zijn met een CA-certificaat.
Vergeet niet te selecteren SHA-256.
We kiezen als sjabloon [standaard] HTTPS_server. Klik op Alles toepassen.
Vervolgens op het tabblad Onderwerp selecteer onze sleutel en vul de verplichte velden in.
Maak sleutels en certificaat voor de gebruiker
De privésleutel van de gebruiker wordt op ons token opgeslagen. Om ermee te kunnen werken, moet u de PKCS#11-bibliotheek vanaf onze website installeren. Voor populaire distributies distribueren we kant-en-klare pakketten, die zich hier bevinden - https://www.rutoken.ru/support/download/pkcs/. We hebben ook assemblages voor arm64, armv7el, armv7hf, e2k, mipso32el, die kunnen worden gedownload van onze SDK - https://www.rutoken.ru/developers/sdk/. Naast assemblies voor Linux zijn er ook assemblies voor macOS, freebsd en Android.
Een nieuwe PKCS#11-provider toevoegen aan XCA. Ga hiervoor naar het menu Opties naar het tabblad PKCS#11-aanbieder.
Жё Toevoegen en selecteer het pad naar de PKCS#11-bibliotheek. In mijn geval is het usrliblibrtpkcs11ecp.so.
Als sleuteltype selecteren we de RSA-2048-sleutel voor de Rutoken EDS PKI. Ik heb deze sleutel Client Key genoemd.
Voer de pincode in. En we wachten op de voltooiing van de hardwaregeneratie van het sleutelpaar
Wij creëren een certificaat voor de gebruiker naar analogie met het servercertificaat. Deze keer selecteren we een sjabloon [standaard] HTTPS_client en vergeet niet te klikken Alles toepassen.
Op het tabblad Onderwerp voer informatie over de gebruiker in. Op het verzoek om het certificaat voor het token op te slaan, antwoorden wij bevestigend.
Als resultaat, op het tabblad Certificaten in XCA zou je zoiets als dit moeten krijgen.
Deze minimale set sleutels en certificaten is voldoende om te beginnen met het opzetten van de servers zelf.
Om te configureren moeten we het CA-certificaat, het servercertificaat en de privésleutel van de server exporteren.
Om dit te doen, selecteert u het gewenste item op het overeenkomstige tabblad in XCA en klikt u op Exporteren.
Nginx
Ik zal niet schrijven over het installeren en uitvoeren van een nginx-server - er zijn genoeg artikelen over dit onderwerp op internet, om nog maar te zwijgen van de officiële documentatie. Laten we meteen beginnen met het instellen van HTTPS en tweefactorauthenticatie met behulp van een token.
Voeg de volgende regels toe aan de serversectie in nginx.conf:
Ik zal slechts kort de vragen beschrijven die ik mezelf afvroeg:
ssl_verify_client - geeft aan dat de vertrouwensketen voor het certificaat moet worden geverifieerd.
ssl_verify_ depth - Definieert de zoekdiepte voor het vertrouwde basiscertificaat in de keten. Omdat ons clientcertificaat onmiddellijk wordt ondertekend op het basiscertificaat, is de diepte ingesteld op 1. Als het gebruikerscertificaat is ondertekend op een tussenliggende CA, moet in deze parameter 2 worden opgegeven, enzovoort.
ssl_client_certificate - specificeert het pad naar het vertrouwde basiscertificaat, dat wordt gebruikt bij het controleren van het vertrouwen in het gebruikerscertificaat.
ssl_certificate/ssl_certificate_key - geef het pad naar het servercertificaat/de privésleutel aan.
Vergeet niet nginx -t uit te voeren om te controleren of er geen typefouten in de configuratie staan, en of alle bestanden op de juiste plaats staan, enzovoort.
En dat is alles! Zoals u kunt zien, is de installatie heel eenvoudig.
Laten we eerst proberen in te loggen zonder token. We krijgen dit beeld:
We gaan naar over: voorkeuren # privacy, en wij gaan naar Beveiligings apparaten…
Жё Ladenom een nieuw PKCS#11-apparaatstuurprogramma toe te voegen en het pad naar onze librtpkcs11ecp.so op te geven.
Om te controleren of het certificaat zichtbaar is, kunt u naar gaan Certificate Manager. U wordt gevraagd uw pincode in te voeren. Na correcte invoer kunt u controleren wat er op het tabblad staat Uw certificaten ons certificaat van het token verscheen.
Laten we nu met het teken gaan. Firefox vraagt u een certificaat te selecteren dat voor de server zal worden geselecteerd. Kies voor ons certificaat.
WINST!
De installatie is één keer voltooid en zoals u kunt zien in het certificaataanvraagvenster, kunnen we onze selectie opslaan. Hierna hoeven we elke keer dat we inloggen op de portal alleen maar een token in te voeren en de gebruikerspincode in te voeren die is opgegeven tijdens het formatteren. Na een dergelijke authenticatie weet de server al welke gebruiker heeft ingelogd en kunt u geen extra vensters meer aanmaken ter verificatie, maar kunt u de gebruiker direct toegang geven tot zijn persoonlijke account.
apache
Net als bij nginx zou niemand problemen moeten hebben met het installeren van apache. Als u niet weet hoe u deze webserver moet installeren, gebruikt u gewoon de officiële documentatie.
En we beginnen met het instellen van onze HTTPS en tweefactorauthenticatie:
Eerst moet je mod_ssl activeren:
$ a2enmod ssl
En schakel vervolgens de standaard HTTPS-instellingen van de site in:
$ a2ensite default-ssl
Nu bewerken we het configuratiebestand: /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
Zoals je kunt zien, vallen de namen van de parameters praktisch samen met de namen van de parameters in nginx, dus ik zal ze niet uitleggen. Nogmaals, iedereen die geïnteresseerd is in de details is welkom bij de documentatie.
Nu starten we onze server opnieuw op:
$ service apache2 reload
$ service apache2 restart
Zoals u kunt zien, duurt het instellen van tweefactorauthenticatie op elke webserver, zowel op Windows als Linux, maximaal een uur. En het instellen van browsers duurt ongeveer 5 minuten. Veel mensen denken dat het opzetten en werken met tweefactorauthenticatie lastig en onduidelijk is. Ik hoop dat ons artikel deze mythe, op zijn minst een beetje, ontkracht.
Alleen geregistreerde gebruikers kunnen deelnemen aan het onderzoek. Inloggen, Alsjeblieft.
Heeft u instructies nodig voor het instellen van TLS met certificaten volgens GOST 34.10-2012:
Ja, TLS-GOST is zeer noodzakelijk
Nee, afstemmen met GOST-algoritmen is niet interessant
44 gebruikers hebben gestemd. 9 gebruikers onthielden zich van stemming.