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

Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux

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

  1. Installeren:
    $ apt-get install xca
  2. En wij rennen:
    $ xca
  3. 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.

  1. 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.
  2. Stel een naam in voor het nieuwe sleutelpaar. Ik noemde het CA Key.
  3. Het CA-certificaat geven wij zelf uit, met behulp van het aangemaakte sleutelpaar. Ga hiervoor naar het tabblad Certificaten en druk op Nieuw certificaat.
  4. Zorg ervoor dat u kiest SHA-256, omdat het gebruik van SHA-1 niet langer als veilig kan worden beschouwd.
  5. Zorg ervoor dat u als sjabloon kiest [standaard] CA. Vergeet niet op te klikken Alles toepassen, anders wordt de sjabloon niet toegepast.
  6. Op het tabblad Onderwerp kies ons sleutelpaar. Daar kunt u alle hoofdvelden van het certificaat invullen.

Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux

Sleutels en een https-servercertificaat aanmaken

  1. Op een vergelijkbare manier creëren we een RSA-2048 privésleutel voor de server, ik noemde deze Serversleutel.
  2. Bij het aanmaken van een certificaat selecteren we dat het servercertificaat ondertekend moet zijn met een CA-certificaat.
  3. Vergeet niet te selecteren SHA-256.
  4. We kiezen als sjabloon [standaard] HTTPS_server. Klik op Alles toepassen.
  5. Vervolgens op het tabblad Onderwerp selecteer onze sleutel en vul de verplichte velden in.

Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux

Maak sleutels en certificaat voor de gebruiker

  1. 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.
  2. Een nieuwe PKCS#11-provider toevoegen aan XCA. Ga hiervoor naar het menu Opties naar het tabblad PKCS#11-aanbieder.
  3. Жё Toevoegen en selecteer het pad naar de PKCS#11-bibliotheek. In mijn geval is het usrliblibrtpkcs11ecp.so.
  4. We hebben een geformatteerd Rutoken EDS PKI-token nodig. Download het rtAdmin-hulpprogramma - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Wij voeren uit
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Als sleuteltype selecteren we de RSA-2048-sleutel voor de Rutoken EDS PKI. Ik heb deze sleutel Client Key genoemd.

    Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux

  7. Voer de pincode in. En we wachten op de voltooiing van de hardwaregeneratie van het sleutelpaar

    Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux

  8. 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.
  9. 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.

Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux
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:

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;
}

Een gedetailleerde beschrijving van alle parameters met betrekking tot het configureren van SSL in nginx vindt u hier - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

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.

Controleren of het werkt in Firefox

Omdat we alles volledig in Linux doen, gaan we ervan uit dat onze gebruikers ook in Linux werken (als ze Windows hebben dan zie instructies voor het instellen van browsers in het vorige artikel.

  1. Laten we Firefox starten.
  2. Laten we eerst proberen in te loggen zonder token. We krijgen dit beeld:

    Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux

  3. We gaan naar over: voorkeuren # privacy, en wij gaan naar Beveiligings apparaten…
  4. Жё Ladenom een ​​nieuw PKCS#11-apparaatstuurprogramma toe te voegen en het pad naar onze librtpkcs11ecp.so op te geven.
  5. 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.
  6. 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.

    Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux

  7. WINST!

    Tweefactorauthenticatie op de site met behulp van een USB-token. Nu ook voor Linux

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:

  1. Eerst moet je mod_ssl activeren:
    $ a2enmod ssl
  2. En schakel vervolgens de standaard HTTPS-instellingen van de site in:
    $ a2ensite default-ssl
  3. 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

  4. 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.

Bron: www.habr.com

Voeg een reactie