
In bespraken we het belang van tweefactorauthenticatie op de bedrijfsportalen van bedrijven. Vorige keer toonden we aan hoe je veilige authenticatie kunt instellen op de webserver IIS.
In de opmerkingen vroegen we ons om een instructie voor de meest voorkomende webservers op Linux — nginx en Apache.
Jullie vroegen — wij schreven.
Wat heb je nodig om te beginnen?
- Enige moderne Linux-distributie. Ik heb een testconfiguratie uitgevoerd in MX Linux 18.2_x64. Dit is natuurlijk geen serverdistributie, maar voor Debian zullen de verschillen waarschijnlijk minimaal zijn. Voor andere distributies kunnen de paden naar bibliotheken en configuraties iets verschillen.
- Token. We blijven het model gebruiken , dat perfect geschikt is qua snelheid voor zakelijk gebruik.
- Om met de token in Linux te werken, moet je de volgende pakketten installeren:
libccid libpcsclite1 pcscd pcsc-tools opensc

Het uitgeven van certificaten
In eerdere artikelen gingen we ervan uit dat de server- en cliëntcertificaten zouden worden uitgegeven met behulp van Microsoft CA. Maar nu we alles in Linux instellen, zullen we ook een alternatieve manier om deze certificaten uit te geven — zonder Linux te verlaten — bespreken.
We zullen XCA gebruiken als CA (), dat beschikbaar is in elke moderne Linux-distributie. Alle handelingen die we in XCA zullen uitvoeren, kunnen ook in de opdrachtregel worden gedaan met behulp van de tools OpenSSL en pkcs11-tool, maar voor meer eenvoud en duidelijkheid zullen we die in dit artikel niet opnemen.
Aan de slag
- We installeren:
$ apt-get install xca - En starten:
$ xca - We creëren onze database voor de CA — /root/CA.xdb
We raden aan om de database van de Certificate Authority op te slaan in een map waar alleen de administrator toegang toe heeft. Dit is belangrijk ter bescherming van de privé-sleutels van de rootcertificaten die worden gebruikt voor het ondertekenen van alle andere certificaten.
We creëren de sleutels en het certificaat van de root CA
In de infrastructuur van openbare sleutels (PKI) bevindt zich een hiërarchisch systeem. Het belangrijkste in dit systeem is het root certification authority of root CA. Het certificaat daarvan moet als eerste worden aangemaakt.
- We creëren een privé-sleutel RSA-2048 voor de CA. Hiervoor klikken we op het tabblad Private Keys en drukken we op Nieuwe Sleutel en kiezen we het overeenkomstige type.
- We geven een naam op voor het nieuwe sleutelpaar. Ik heb het — CA Key — genoemd.
- We issue the CA certificate using the created key pair. For this, we go to the tab Certificates and click New Certificate.
- Be sure to select SHA-256, because the use of SHA-1 can no longer be considered secure.
- As a template, be sure to select [default] CA. Don’t forget to click on Apply all, otherwise the template will not be applied.
- Op het tabblad Subject we select our key pair. There you can also fill in all the main fields of the certificate.

We create keys and the HTTPS server certificate
- Similarly, we create an RSA-2048 private key for the server, which I named — Server Key.
- When creating the certificate, we select that the server certificate needs to be signed with the CA certificate.
- Don’t forget to select SHA-256.
- As a template, we select [default] HTTPS_server. We click on Apply all.
- After that, on the tab Subject we select our key and fill in the required fields.

We create keys and certificates for the user
- The user's private key will be stored on our token. To work with it, it is necessary to install the PKCS#11 library from our site. For popular distributions, we provide ready-made packages available here — . We also have builds for arm64, armv7el, armv7hf, e2k, mipso32el, which can be found in our SDK — . In addition to Linux builds, there are also builds for macOS, FreeBSD, and Android.
- We add a new PKCS#11 Provider in XCA. For this, we go to the menu Opties to the tab PKCS#11 Provider.
- We click Add and select the path to the PKCS#11 library. In my case, it is usrliblibrtpkcs11ecp.so.
- We will need a formatted token of the Rutoken e-Signature PKI. We download the rtAdmin utility —
- We execute
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u - As the key type, we select — RSA-2048 key on the Rutoken e-Signature PKI. I named this key Client Key.

- We enter the PIN code. And wait for the hardware key pair generation to complete

- We create a certificate for the user similarly to the server certificate. This time we select the template [default] HTTPS_client and do not forget to click Apply all.
- Op het tabblad Subject we enter the user information. When prompted to save the certificate on the token, we confirm.
As a result, on the tab Certificates in XCA, there should be an image like this.

This minimal set of keys and certificates is sufficient to start configuring the servers directly.
For configuration, we need to export the CA certificate, the server certificate, and the private key of the server.
Hiervoor moet u de gewenste registratie op het bijbehorende tabblad in XCA selecteren en op drukken. Exporteer.
Nginx
Ik zal niet beschrijven hoe je een nginx-server installeert en start - hierover zijn er genoeg artikelen op internet, om nog maar te zwijgen over de officiële documentatie. Laten we meteen doorgaan met de configuratie van HTTPS en twee-factorauthenticatie via token.
Voeg de volgende regels toe aan de sectie server 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 uitgebreide beschrijving van alle parameters met betrekking tot ssl-configuratie in nginx vindt u hier -
Ik zal alleen kort de parameters beschrijven die ik zelf heb ingesteld:
- ssl_verify_client - geeft aan dat de vertrouwensketen van het certificaat moet worden gecontroleerd.
- ssl_verify_depth - bepaalt de diepte van het zoeken naar een vertrouwd rootcertificaat in de keten. Aangezien ons clientcertificaat direct is ondertekend door het rootcertificaat, is de diepte ingesteld op 1. Als het gebruikerscertificaat is ondertekend door een tussenliggende CA, moet deze parameter 2 zijn, enzovoort.
- ssl_client_certificate - geeft het pad naar het vertrouwde rootcertificaat op dat wordt gebruikt om de vertrouwensrelatie met het gebruikerscertificaat te controleren.
- ssl_certificate/ssl_certificate_key - geven het pad naar het certificaat/de privésleutel van de server aan.
Vergeet niet om nginx -t uit te voeren om te controleren of er geen typfouten in de configuratie staan en of alle bestanden op de juiste plaats liggen, enzovoort.
En dat is alles! Zoals je ziet is de configuratie heel eenvoudig.
Controleer de werking in Firefox
Aangezien мы alles volledig in Linux doen, gaan we er vanuit dat onze gebruikers ook in Linux werken (als ze Windows hebben, dan .
- Start Firefox.
- Laten we eerst proberen om zonder token in te loggen. We krijgen zo'n afbeelding:

- Ga naar about:preferences#privacy, en ga naar Security Devices…
- We click Load, om een nieuwe PKCS#11 Device Driver toe te voegen en het pad naar onze librtpkcs11ecp.so op te geven.
- Om te controleren of het certificaat wordt herkend, kunt u naar Certificate Manager. Er verschijnt een verzoek om de PIN-code in te voeren. Na de juiste invoer kunt u controleren of ons certificaat met de token op het tabblad Your Certificates is weergegeven.
- Nu loggen we in met de token. Firefox vraagt om het certificaat te kiezen dat op de server zal worden geselecteerd. We selecteren ons certificaat.

- WINST!

De configuratie wordt één keer uitgevoerd, en zoals je kunt zien in het venster voor het aanvragen van een certificaat, kunnen we onze keuze opslaan. Daarna hoeven we bij elke login op het portaal alleen maar de token in te voeren en de gebruikers-PIN in te vullen die is ingesteld tijdens de formattering. Na deze authenticatie weet de server al welke gebruiker is ingelogd en hoeft er verder geen extra venster voor verificatie te worden geopend; de gebruiker kan meteen zijn persoonlijke account in.
Apache
Net als bij nginx zou niemand problemen moeten hebben met het installeren van apache. Als je niet weet hoe je deze webserver moet installeren, maak dan gewoon gebruik van de officiële documentatie.
En we gaan nu verder met de configuratie van onze HTTPS en twee-factor-authenticatie:
- Eerst moeten we mod_ssl activeren:
$ a2enmod ssl - En dan de standaard HTTPS-instellingen van de site inschakelen:
$ 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 10Zoals je ziet, komen de namen van de parameters praktisch overeen met die van nginx, dus ik zal ze niet uitleggen. Nogmaals, wie geïnteresseerd is in de details, welkom bij de documentatie.
Nu herstarten we onze server:$ service apache2 reload $ service apache2 restart
Zoals je ziet, is het configureren van twee-factor-authenticatie op elke webserver, zowel op Windows als op Linux, een kwestie van maximaal een uur. Het instellen van de browsers duurt ongeveer 5 minuten. Veel mensen denken dat de configuratie en het werken met twee-factor-authenticatie moeilijk en onduidelijk is. Ik hoop dat ons artikel dit mythe, zij het een beetje, ontkracht.
Alleen geregistreerde gebruikers kunnen deelnemen aan de enquête. , alstublieft.
Is er een handleiding nodig voor het instellen van TLS met certificaten op GOST 34.10-2012:
Ja, TLS-GOST is echt nodig
Nee, de configuratie met GOST-algoritmes is niet interessant
44 gebruikers hebben gestemd. 9 gebruikers hebben zich onthouden.
Bron: habr.com





