Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux
В jeden z našich předchozích článků jsme hovořili o důležitosti dvoufaktorové autentizace na firemních portálech firem. Minule jsme si ukázali, jak nastavit bezpečné ověřování na webovém serveru IIS.

V komentářích jsme byli požádáni, abychom napsali návod na nejběžnější webové servery pro Linux - nginx a Apache.

Ptali jste se - psali jsme.

Co potřebujete, abyste mohli začít?

  • Jakákoli moderní distribuce Linuxu. Provedl jsem testovací nastavení na MX Linux 18.2_x64. Toto samozřejmě není serverová distribuce, ale u Debianu pravděpodobně nebudou žádné rozdíly. U jiných distribucí se mohou cesty ke konfiguračním knihovnám mírně lišit.
  • Žeton. Pokračujeme v používání modelu Rutoken EDS PKI, což je z hlediska rychlostních charakteristik ideální pro firemní použití.
  • Chcete-li pracovat s tokenem v systému Linux, musíte nainstalovat následující balíčky:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

Vydávání certifikátů

V předchozích článcích jsme spoléhali na to, že serverové a klientské certifikáty budou vydávány pomocí Microsoft CA. Ale protože vše nastavujeme v Linuxu, řekneme vám také o alternativním způsobu vydávání těchto certifikátů – aniž bychom museli opustit Linux.
Jako CA budeme používat XCA (https://hohnstaedt.de/xca/), který je dostupný v jakékoli moderní distribuci Linuxu. Všechny akce, které budeme v XCA provádět, lze provést v režimu příkazového řádku pomocí utilit OpenSSL a pkcs11-tool, ale pro větší jednoduchost a přehlednost je v tomto článku nebudeme uvádět.

Začínáme

  1. Nainstalujte:
    $ apt-get install xca
  2. A běžíme:
    $ xca
  3. Vytváříme naši databázi pro CA - /root/CA.xdb
    Doporučujeme uložit databázi certifikačního úřadu do složky, kam má přístup pouze správce. To je důležité pro ochranu soukromých klíčů kořenových certifikátů, které se používají k podepisování všech ostatních certifikátů.

Vytvořte klíče a kořenový certifikát CA

Infrastruktura veřejného klíče (PKI) je založena na hierarchickém systému. Hlavní věcí v tomto systému je kořenová certifikační autorita nebo kořenová CA. Nejprve musí být vytvořen jeho certifikát.

  1. Vytváříme soukromý klíč RSA-2048 pro CA. Chcete-li to provést, na kartě Soukromé klíče tam Nový klíč a vyberte vhodný typ.
  2. Nastavte název pro nový pár klíčů. Nazval jsem to CA Key.
  3. Vlastní certifikát CA vystavíme pomocí vytvořeného páru klíčů. Chcete-li to provést, přejděte na kartu Certifikáty a tlačit Nový certifikát.
  4. Určitě si vyberte SHA-256, protože používání SHA-1 již nelze považovat za bezpečné.
  5. Nezapomeňte vybrat jako šablonu [výchozí] CA. Nezapomeňte kliknout na Použít vše, jinak se šablona nepoužije.
  6. V záložce Předmět vyberte si náš pár klíčů. Zde můžete vyplnit všechna hlavní pole certifikátu.

Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

Vytváření klíčů a certifikátu serveru https

  1. Podobným způsobem vytvoříme soukromý klíč RSA-2048 pro server, nazval jsem ho Server Key.
  2. Při vytváření certifikátu zvolíme, že certifikát serveru musí být podepsán certifikátem CA.
  3. Nezapomeňte vybrat SHA-256.
  4. Vybíráme jako šablonu [výchozí] HTTPS_server. Klikněte na Použít vše.
  5. Poté na kartě Předmět vyberte náš klíč a vyplňte požadovaná pole.

Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

Vytvořte klíče a certifikát pro uživatele

  1. Soukromý klíč uživatele bude uložen na našem tokenu. Abyste s ním mohli pracovat, musíte si z našeho webu nainstalovat knihovnu PKCS#11. Pro oblíbené distribuce distribuujeme hotové balíčky, které se nacházejí zde - https://www.rutoken.ru/support/download/pkcs/. Máme také sestavy pro arm64, armv7el, armv7hf, e2k, mipso32el, které lze stáhnout z našeho SDK - https://www.rutoken.ru/developers/sdk/. Kromě sestavení pro Linux existují také sestavení pro macOS, freebsd a android.
  2. Přidání nového poskytovatele PKCS#11 do XCA. Chcete-li to provést, přejděte do nabídky možnosti na kartu Poskytovatel PKCS#11.
  3. Tiskneme přidat a vyberte cestu ke knihovně PKCS#11. V mém případě je to usrliblibrtpkcs11ecp.so.
  4. Budeme potřebovat naformátovaný token Rutoken EDS PKI. Stáhněte si nástroj rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Provádíme
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Jako typ klíče vybereme klíč RSA-2048 pro Rutoken EDS PKI. Tento klíč jsem nazval Klientský klíč.

    Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

  7. Zadejte PIN kód. A čekáme na dokončení hardwarového generování páru klíčů

    Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

  8. Certifikát pro uživatele vytvoříme analogicky s certifikátem serveru. Tentokrát vybíráme šablonu [výchozí] HTTPS_client a nezapomeňte kliknout Použít vše.
  9. V záložce Předmět zadejte informace o uživateli. Na žádost o uložení certifikátu pro token odpovídáme kladně.

V důsledku toho na tab Certifikáty v XCA byste měli dostat něco takového.

Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux
Tato minimální sada klíčů a certifikátů stačí k zahájení nastavení samotných serverů.

Ke konfiguraci potřebujeme exportovat certifikát CA, certifikát serveru a soukromý klíč serveru.

Chcete-li to provést, vyberte požadovanou položku na odpovídající kartě v XCA a klikněte Vývoz.

Nginx

Nebudu psát, jak nainstalovat a spustit server nginx - na internetu je na toto téma dost článků, nemluvě o oficiální dokumentaci. Pojďme rovnou k nastavení HTTPS a dvoufaktorové autentizace pomocí tokenu.

Přidejte následující řádky do sekce server v 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;
}

Podrobný popis všech parametrů souvisejících s konfigurací ssl v nginx naleznete zde - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Jen stručně popíšu ty, na které jsem se sám sebe zeptal:

  • ssl_verify_client - určuje, že je třeba ověřit řetězec důvěryhodnosti certifikátu.
  • ssl_verify_depth – Definuje hloubku vyhledávání pro důvěryhodný kořenový certifikát v řetězci. Vzhledem k tomu, že náš klientský certifikát je okamžitě podepsán na kořenovém certifikátu, je hloubka nastavena na 1. Pokud je uživatelský certifikát podepsán na zprostředkující CA, musí být v tomto parametru uvedena hodnota 2 a tak dále.
  • ssl_client_certificate - určuje cestu k důvěryhodnému kořenovému certifikátu, který se používá při kontrole důvěry v certifikát uživatele.
  • ssl_certificate/ssl_certificate_key - uveďte cestu k certifikátu serveru/soukromému klíči.

Nezapomeňte spustit nginx -t, abyste zkontrolovali, že v konfiguraci nejsou žádné překlepy a že všechny soubory jsou na správném místě a tak dále.

A to je vše! Jak vidíte, nastavení je velmi jednoduché.

Kontrola funkčnosti ve Firefoxu

Protože vše děláme kompletně v Linuxu, budeme předpokládat, že naši uživatelé také pracují v Linuxu (pokud mají Windows, tak viz pokyny pro nastavení prohlížečů v předchozím článku.

  1. Spustíme Firefox.
  2. Zkusme se nejprve přihlásit bez tokenu. Dostáváme tento obrázek:

    Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

  3. Pokračujeme o: preference # soukromí, a jdeme do Bezpečnostní zařízení…
  4. Tiskneme Zatíženípřidat nový ovladač zařízení PKCS#11 a zadat cestu k našemu librtpkcs11ecp.so.
  5. Chcete-li zkontrolovat, zda je certifikát viditelný, přejděte na stránku Správce certifikátů. Budete vyzváni k zadání kódu PIN. Po správném zadání můžete zkontrolovat, co je na kartě Vaše certifikáty se objevil náš certifikát z tokenu.
  6. Nyní pojďme s tokenem. Firefox vás vyzve k výběru certifikátu, který bude vybrán pro server. Vyberte si náš certifikát.

    Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

  7. ZISKU!

    Dvoufaktorová autentizace na webu pomocí USB tokenu. Nyní i pro Linux

Nastavení se provede jednou a jak můžete vidět v okně žádosti o certifikát, můžeme náš výběr uložit. Poté nám při každém přihlášení do portálu stačí vložit token a zadat uživatelský PIN kód, který byl zadán při formátování. Po takové autentizaci již server ví, který uživatel se přihlásil a vy již nemůžete vytvářet další okna pro ověření, ale rovnou pustit uživatele do jeho osobního účtu.

Apache

Stejně jako u nginx by nikdo neměl mít problémy s instalací apache. Pokud nevíte, jak tento webový server nainstalovat, použijte oficiální dokumentaci.

A začneme nastavovat naše HTTPS a dvoufaktorové ověřování:

  1. Nejprve musíte aktivovat mod_ssl:
    $ a2enmod ssl
  2. A poté povolte výchozí nastavení HTTPS webu:
    $ a2ensite default-ssl
  3. Nyní upravíme konfigurační soubor: /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

    Jak vidíte, názvy parametrů se prakticky shodují s názvy parametrů v nginx, takže je nebudu vysvětlovat. Opět platí, že každý, koho zajímají podrobnosti, je vítán v dokumentaci.
    Nyní restartujeme náš server:

    $ service apache2 reload
    $ service apache2 restart

  4. Jak vidíte, nastavení dvoufaktorové autentizace na jakémkoli webovém serveru, ať už na Windows nebo Linuxu, trvá maximálně jednu hodinu. A nastavení prohlížečů trvá asi 5 minut. Mnoho lidí si myslí, že nastavení a práce s dvoufaktorovou autentizací je obtížné a nejasné. Doufám, že náš článek tento mýtus alespoň trochu vyvrací.

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Potřebujete pokyny pro nastavení TLS s certifikáty podle GOST 34.10-2012:

  • Ano, TLS-GOST je velmi potřebný

  • Ne, ladění pomocí algoritmů GOST není zajímavé

Hlasovalo 44 uživatelů. 9 uživatelů se zdrželo hlasování.

Zdroj: www.habr.com

Přidat komentář