ProHoster > Blog > administracja > Uwierzytelnianie dwuskładnikowe w serwisie za pomocą tokena USB. Teraz także dla Linuksa
Uwierzytelnianie dwuskładnikowe w serwisie za pomocą tokena USB. Teraz także dla Linuksa
В jeden z naszych poprzednich artykułów rozmawialiśmy o znaczeniu uwierzytelniania dwuskładnikowego na portalach korporacyjnych firm. Ostatnim razem pokazaliśmy, jak skonfigurować bezpieczne uwierzytelnianie na serwerze internetowym IIS.
W komentarzach zostaliśmy poproszeni o napisanie instrukcji dla najpopularniejszych serwerów WWW dla Linuksa - nginx i Apache.
Pytaliście – pisaliśmy.
Czego potrzebujesz, aby zacząć?
Dowolna nowoczesna dystrybucja Linuksa. Zrobiłem konfigurację testową na MX Linux 18.2_x64. Nie jest to oczywiście dystrybucja serwerowa, ale jest mało prawdopodobne, aby istniały jakiekolwiek różnice w przypadku Debiana. W przypadku innych dystrybucji ścieżki do bibliotek konfiguracyjnych mogą się nieznacznie różnić.
Znak. Kontynuujemy korzystanie z tego modelu Rutoken EDS PKI, który jest idealny pod względem charakterystyki prędkości do użytku korporacyjnego.
Aby pracować z tokenem w systemie Linux, musisz zainstalować następujące pakiety:
libccid libpcsclite1 pcscd pcsc-tools opensc
Wydawanie certyfikatów
W poprzednich artykułach opieraliśmy się na tym, że certyfikaty serwera i klienta będą wystawiane przy użyciu Microsoft CA. Ponieważ jednak wszystko konfigurujemy w Linuksie, powiemy Ci również o alternatywnym sposobie wydawania tych certyfikatów - bez opuszczania Linuksa.
Będziemy używać XCA jako CA (https://hohnstaedt.de/xca/), który jest dostępny w każdej nowoczesnej dystrybucji Linuksa. Wszystkie akcje, które wykonamy w XCA, można wykonać w trybie wiersza poleceń za pomocą narzędzi OpenSSL i pkcs11-tool, jednak dla większej prostoty i przejrzystości nie będziemy ich prezentować w tym artykule.
Pierwsze kroki
Zainstalować:
$ apt-get install xca
I biegniemy:
$ xca
Tworzymy naszą bazę danych dla CA - /root/CA.xdb
Zalecamy przechowywanie bazy danych urzędu certyfikacji w folderze, do którego dostęp ma wyłącznie administrator. Jest to ważne, aby chronić klucze prywatne certyfikatów głównych, które służą do podpisywania wszystkich pozostałych certyfikatów.
Utwórz klucze i certyfikat głównego urzędu certyfikacji
Infrastruktura klucza publicznego (PKI) opiera się na systemie hierarchicznym. Najważniejszą rzeczą w tym systemie jest główny urząd certyfikacji lub główny urząd certyfikacji. Najpierw należy utworzyć jego certyfikat.
Tworzymy klucz prywatny RSA-2048 dla urzędu certyfikacji. Aby to zrobić, na karcie Klucze prywatne naciskać Nowy klucz i wybierz odpowiedni typ.
Ustaw nazwę nowej pary kluczy. Nazwałem to Kluczem CA.
Sam certyfikat CA wystawiamy, korzystając z utworzonej pary kluczy. W tym celu przejdź do zakładki certyfikaty i kliknij Nowy Certyfikat.
Wybierz koniecznie SHA-256, ponieważ używanie SHA-1 nie może być już uważane za bezpieczne.
Pamiętaj, aby wybrać jako szablon [domyślnie] CA. Nie zapomnij kliknąć Zastosuj wszystkie, w przeciwnym razie szablon nie zostanie zastosowany.
W zakładce Temat
wybierz naszą parę kluczy. Tam możesz wypełnić wszystkie główne pola certyfikatu.
Tworzenie kluczy i certyfikatu serwera https
W podobny sposób tworzymy klucz prywatny RSA-2048 dla serwera, nazwałem go Kluczem Serwera.
Tworząc certyfikat zaznaczamy, że certyfikat serwera musi być podpisany certyfikatem CA.
Nie zapomnij wybrać SHA-256.
Wybieramy jako szablon [domyślnie] Serwer_HTTPS. Kliknij Zastosuj wszystkie.
Następnie na karcie Temat
wybierz nasz klucz i wypełnij wymagane pola.
Utwórz klucze i certyfikat dla użytkownika
Klucz prywatny użytkownika będzie przechowywany na naszym tokenie. Aby z nim pracować, musisz zainstalować bibliotekę PKCS#11 z naszej strony internetowej. Do popularnych dystrybucji dystrybuujemy gotowe pakiety, które znajdują się tutaj - https://www.rutoken.ru/support/download/pkcs/. Mamy również zestawy dla arm64, armv7el, armv7hf, e2k, mipso32el, które można pobrać z naszego SDK - https://www.rutoken.ru/developers/sdk/. Oprócz zestawów dla systemu Linux istnieją również zestawy dla systemów macOS, freebsd i Android.
Dodanie nowego dostawcy PKCS#11 do XCA. Aby to zrobić, przejdź do menu Opcje do zakładki Dostawca PKCS#11.
Naciskamy Dodaj i wybierz ścieżkę do biblioteki PKCS#11. W moim przypadku jest to usrliblibrtpkcs11ecp.so.
Jako typ klucza wybieramy klucz RSA-2048 dla Rutoken EDS PKI. Nazwałem ten klucz Kluczem Klienta.
Wprowadź kod PIN. I czekamy na zakończenie sprzętowego generowania pary kluczy
Certyfikat dla użytkownika tworzymy analogicznie do certyfikatu serwera. Tym razem wybieramy szablon [domyślnie] Klient HTTPS i nie zapomnij kliknąć Zastosuj wszystkie.
W zakładce Temat
wprowadzić informacje o użytkowniku. Na prośbę o zapisanie certyfikatu dla tokena odpowiadamy twierdząco.
W rezultacie na karcie Certyfikaty w XCA powinieneś dostać coś takiego.
Ten minimalny zestaw kluczy i certyfikatów wystarczy, aby rozpocząć konfigurację samych serwerów.
Aby dokonać konfiguracji musimy wyeksportować certyfikat CA, certyfikat serwera i klucz prywatny serwera.
Aby to zrobić, wybierz żądany wpis na odpowiedniej zakładce w XCA i kliknij Export.
nginx
Nie będę pisać jak zainstalować i uruchomić serwer nginx - w Internecie jest wystarczająco dużo artykułów na ten temat, nie mówiąc już o oficjalnej dokumentacji. Przejdźmy od razu do konfiguracji HTTPS i uwierzytelniania dwuskładnikowego za pomocą tokena.
Dodaj następujące wiersze do sekcji serwera w pliku nginx.conf:
Opiszę tylko pokrótce te, które sam sobie zadałem:
ssl_verify_client — określa, że łańcuch zaufania certyfikatu musi zostać zweryfikowany.
ssl_verify_length — definiuje głębokość wyszukiwania zaufanego certyfikatu głównego w łańcuchu. Ponieważ certyfikat naszego klienta jest natychmiast podpisywany na certyfikacie głównym, głębokość jest ustawiona na 1. Jeśli certyfikat użytkownika jest podpisany w pośrednim urzędzie certyfikacji, wówczas w tym parametrze należy podać 2 i tak dalej.
ssl_client_certificate - określa ścieżkę do zaufanego certyfikatu głównego, który jest używany podczas sprawdzania zaufania do certyfikatu użytkownika.
ssl_certificate/ssl_certificate_key - wskaż ścieżkę do certyfikatu/klucza prywatnego serwera.
Nie zapomnij uruchomić nginx -t, aby sprawdzić, czy w konfiguracji nie ma literówek i czy wszystkie pliki są na właściwym miejscu itd.
I to wszystko! Jak widać konfiguracja jest bardzo prosta.
Spróbujmy najpierw zalogować się bez tokena. Otrzymujemy taki obrazek:
Idziemy dalej about: preferencje # prywatność, i idziemy do Urządzenia bezpieczeństwa…
Naciskamy Załadowaćaby dodać nowy sterownik urządzenia PKCS#11 i określić ścieżkę do naszego pliku librtpkcs11ecp.so.
Aby sprawdzić, czy certyfikat jest widoczny, możesz przejść do Menedżer certyfikatów. Zostaniesz poproszony o podanie kodu PIN. Po poprawnym wprowadzeniu możesz sprawdzić, co znajduje się na zakładce Twoje certyfikaty pojawił się nasz certyfikat z tokena.
Przejdźmy teraz do tokena. Firefox poprosi Cię o wybranie certyfikatu, który zostanie wybrany dla serwera. Wybierz nasz certyfikat.
ZYSK!
Konfiguracja odbywa się raz i jak widać w oknie żądania certyfikatu, możemy zapisać nasz wybór. Od tego momentu przy każdorazowym logowaniu do portalu wystarczyć będzie nam jedynie włożenie tokena i podanie kodu PIN użytkownika, który został podany podczas formatowania. Po takim uwierzytelnieniu serwer już wie, który użytkownik się zalogował i nie można już tworzyć żadnych dodatkowych okienek do weryfikacji, tylko od razu wpuścić użytkownika na jego konto osobiste.
Apache
Podobnie jak w przypadku nginx, nikt nie powinien mieć problemów z instalacją Apache. Jeśli nie wiesz, jak zainstalować ten serwer WWW, po prostu skorzystaj z oficjalnej dokumentacji.
I zaczynamy konfigurować nasze uwierzytelnianie HTTPS i dwuskładnikowe:
Najpierw musisz aktywować mod_ssl:
$ a2enmod ssl
A następnie włącz domyślne ustawienia HTTPS witryny:
$ a2ensite default-ssl
Teraz edytujemy plik konfiguracyjny: /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 widać nazwy parametrów praktycznie pokrywają się z nazwami parametrów w nginxie, więc nie będę ich wyjaśniał. Ponownie wszystkich zainteresowanych szczegółami zapraszamy do dokumentacji.
Teraz restartujemy nasz serwer:
$ service apache2 reload
$ service apache2 restart
Jak widać, konfiguracja uwierzytelniania dwuskładnikowego na dowolnym serwerze internetowym, czy to w systemie Windows, czy Linux, zajmuje maksymalnie godzinę. Konfiguracja przeglądarek zajmuje około 5 minut. Wiele osób uważa, że konfiguracja i praca z uwierzytelnianiem dwuskładnikowym jest trudna i niejasna. Mam nadzieję, że nasz artykuł choć trochę obali ten mit.
W ankiecie mogą brać udział tylko zarejestrowani użytkownicy. Zaloguj się, Proszę.
Czy potrzebujesz instrukcji konfiguracji TLS z certyfikatami zgodnie z GOST 34.10-2012:
Tak, TLS-GOST jest bardzo potrzebny
Nie, strojenie za pomocą algorytmów GOST nie jest interesujące
Głosowało 44 użytkowników. 9 użytkowników wstrzymało się od głosu.