To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux
I en af vores tidligere artikler talte vi om vigtigheden af tofaktorgodkendelse på virksomheders portaler. Sidste gang demonstrerede vi, hvordan man konfigurerer sikker godkendelse i webserveren IIS.

I kommentarerne blev vi bedt om at skrive en vejledning til de mest almindelige webservere til Linux — nginx og Apache.

I baade jeres ønsker og vores har vi skrevet denne artikel.

Hvad skal der til for at komme i gang?

  • Enhver moderne Linux-distribution. Jeg udførte en testopsætning i MX Linux 18.2_x64. Det er selvfølgelig ikke en serverdistribution, men der vil næppe være nogen forskelle for Debian. For andre distributioner kan stierne til bibliotekernes konfigurationer variere en smule.
  • Token. Vi fortsætter med at bruge modellen Routoken EDS PKI, som er ideel til virksomhedens brug baseret på hastighed.
  • For at arbejde med tokenet på Linux er det nødvendigt at installere følgende pakker:
    libccid libpcsclite1 pcscd pcsc-tools opensc

To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

Udstedelse af certifikater

I tidligere artikler har vi antaget, at server- og klientcertifikater vil blive udstedt ved hjælp af Microsoft CA. Men nu hvor vi opsætter alt i Linux, vil vi også fortælle om en alternativ metode til at udstede disse certifikater — uden at forlade Linux.
Som CA vil vi bruge XCA (https://hohnstaedt.de/xca/), som er tilgængelig i enhver moderne Linux-distribution. Alle handlinger, vi vil udføre i XCA, kan også udføres i kommandolinjemodus ved hjælp af værktøjerne OpenSSL og pkcs11-tool, men for enkelhedens og tydelighedens skyld vil vi ikke inkludere dem i denne artikel.

Getting Started

  1. Installerer:
    $ apt-get install xca
  2. Og starter:
    $ xca
  3. Opretter vores database for CA — /root/CA.xdb
    Vi anbefaler, at du opbevarer Certificate Authority-databasen i en mappe, som kun administratoren har adgang til. Dette er vigtigt for at beskytte de private nøgler til rodcertifikaterne, der bruges til at underskrive alle de øvrige certifikater.

Opretter nøgler og certifikat for root CA

I bunden af infrastrukturerne for åbne nøgler (PKI) ligger der et hierarkisk system. Det vigtigste i dette system er root certificeringscenter eller root CA. Dets certifikat skal oprettes først.

  1. Opretter en RSA-2048 privat nøgle til CA. Dette gøres under fanen Private Keys klik New Key og vælg den relevante type.
  2. Giv et navn til det nye nøglepar. Jeg har kaldt det — CA Key.
  3. Vi udskriver selve CA-certifikatet ved hjælp af det oprettede nøglepar. For at gøre dette går vi til fanen Certifikater og klikker på Nyt certifikat.
  4. Sørg for at vælge SHA-256, fordi brugen af SHA-1 ikke længere kan betragtes som sikkert.
  5. Som skabelon skal vi vælge [default] CA. Glem ikke at klikke på Anvend alle, ellers anvendes skabelonen ikke.
  6. Under fanen Emne vi vælger vores nøglepar. Her kan du også udfylde alle de grundlæggende felter i certifikatet.

To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

Vi opretter nøgler og certifikat til https-serveren

  1. På samme måde opretter vi en privat RSA-2048-nøgle til serveren, som jeg kaldte — Server Key.
  2. Ved oprettelse af certifikatet vælger vi, at servercertifikatet skal underskrives med CA-certifikatet.
  3. Husk at vælge SHA-256.
  4. Som skabelon vælger vi [default] HTTPS_server. Klik på Anvend alle.
  5. Derefter vælger vi vores nøgle i fanen Emne og udfylder de nødvendige felter.

To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

Vi opretter nøgler og certifikat til brugeren

  1. Brugerens private nøgle vil blive gemt på vores token. For at arbejde med den skal PKCS#11-biblioteket installeres fra vores hjemmeside. For populære distributioner distribuerer vi klare pakker, som kan findes her — https://www.rutoken.ru/support/download/pkcs/. Vi har også versioner til arm64, armv7el, armv7hf, e2k, mipso32el, som kan hentes i vores SDK — https://www.rutoken.ru/developers/sdk/. Udover versioner til linux er der også versioner til macOS, freebsd og android.
  2. Vi tilføjer en ny PKCS#11-leverandør i XCA. For at gøre dette går vi til menuen Indstillinger til fanen PKCS#11 Leverandør.
  3. Klik på Tilføj og vælg stien til PKCS#11-biblioteket. I mit tilfælde er det usrliblibrtpkcs11ecp.so.
  4. Vi har brug for et formateret token, Rutoken EDS PKI. Download værktøjet rtAdmin — https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Vi udfører
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u
  6. Som nøgletype vælger vi — RSA-2048-nøgle på Rutoken EDS PKI. Jeg kaldte denne nøgle Client Key.

    To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

  7. Indtast PIN-koden. Og vent på, at den hardwarebaserede nøgglegenerering er færdig.

    To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

  8. Vi opretter certifikatet til brugeren på samme måde som servercertifikatet. Denne gang vælger vi skabelonen [default] HTTPS_client og glem ikke at klikke på Anvend alle.
  9. Under fanen Emne vi indtaster brugerens oplysninger. På spørgsmålet om at gemme certifikatet på tokenet svarer vi bekræftende.

Resultatet på fanen Certifikater i XCA skal se cirka sådan ud.

To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux
Dette minimale sæt af nøgler og certifikater er tilstrækkeligt til at begynde konfigurationen af serverne.

For konfigurationen skal vi eksportere CA-certifikatet, servercertifikatet og serverens private nøgle.

For this, you need to select the desired entry in the corresponding tab in XCA and click Eksportér.

Nginx

I won't write about how to install and launch the nginx server — there are plenty of articles on the internet about this topic, not to mention the official documentation. Let's get straight to configuring HTTPS and two-factor authentication via token.

Add the following lines to the server section 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;
}

A detailed description of all parameters related to ssl configuration in nginx can be found here — https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

I will briefly describe those that I set myself:

  • ssl_verify_client — indicates that the trust chain for the certificate needs to be verified.
  • ssl_verify_depth — defines the depth of the search for the trusted root certificate in the chain. Since our client certificate is directly signed by the root certificate, the depth is set to — 1. If the user's certificate is signed by an intermediate CA, then this parameter needs to be set to 2, and so on.
  • ssl_client_certificate — specifies the path to the trusted root certificate used to verify the user's certificate.
  • ssl_certificate/ssl_certificate_key — specify the path to the server's certificate/private key.

Don't forget to run nginx -t to check that there are no typos in the config, and that all files are in the right place, etc.

And that's it! As you can see, the setup is very simple.

Check functionality in Firefox

Since we are doing everything completely in Linux, we will assume that our users also work in Linux (if they have Windows, then see the guide on browser configuration in the previous article.

  1. Launch Firefox.
  2. Let's try to access initially without a token. We get this picture:

    To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

  3. Go to about:preferences#privacy, and go to Security Devices…
  4. Klik på Belastning, to add a new PKCS#11 Device Driver and specify the path to our librtpkcs11ecp.so.
  5. To check that the certificate is recognized, you can go to Certificate Manager. A prompt will appear to enter the PIN code. After entering it correctly, you can check that our certificate with the token appeared on the tab Your Certificates .
  6. Now we enter with the token. Firefox offers to select the certificate that will be chosen on the server. We select our certificate.

    To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

  7. PROFIT!

    To-faktor autentificering på webstedet ved hjælp af en USB-token. Nu også til Linux

Konfiguration udføres én gang, og som det ses i vinduet til certifikatforespørgslen, kan vi gemme vores valg. Herefter skal vi blot indsætte token og indtaste PIN-koden for brugeren hver gang, vi logger ind på portalen, som blev angivet under formateringen. Efter en sådan godkendelse ved serveren allerede, hvilken bruger der er logget ind, og der er ikke behov for yderligere vinduer til kontrol, så brugeren kan straks få adgang til sin personlige konto.

«Ressourcen kan være sårbar overfor DROWN, hvis dens nøgler bruges af en ekstern server med SSLv2, for eksempel en mailserver», bemærker lederen af udviklingsafdelingen

Ligesom med nginx bør installationen af apache ikke give problemer for nogen. Hvis du ikke ved, hvordan man installerer denne webserver, så brug blot den officielle dokumentation.

Og så går vi i gang med at konfigurere vores HTTPS og to-faktor autentificering:

  1. Først skal mod_ssl aktiveres:
    $ a2enmod ssl
  2. Og derefter aktiver standard HTTPS-indstillingerne for webstedet:
    $ a2ensite default-ssl
  3. Nu redigerer 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  10

    Som du kan se, matcher parametrenes navne næsten dem i nginx, derfor vil jeg ikke uddybe dem. Igen, hvis nogen er interesseret i detaljerne — velkommen til dokumentationen.
    Nu genstarter vi vores server:

    $ service apache2 reload
    $ service apache2 restart

  4. Som du kan se, kan man konfigurere to-faktor autentificering på enhver webserver, både i Windows og Linux, på højst en time. At konfigurere browsere tager omkring 5 minutter. Mange mener, at opsætning og arbejde med to-faktor autentificering er svært og uforståeligt. Jeg håber, at vores artikel i det mindste lidt afviser denne myte.

Kun registrerede brugere kan deltage i undersøgelsen. Log ind, please.

Er der brug for en vejledning til opsætning af TLS med certifikater på GOST 34.10-2012:

  • Ja, TLS-GOST er meget nødvendigt

  • Nej, opsætning med GOST-algoritmer er ikke interessant

44 brugere stemte. 9 brugere undlod at stemme.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster