ProHoster > Блог > адміністрування > Двофакторна аутентифікація на сайті з використанням USB-токену. Тепер і для Linux
Двофакторна аутентифікація на сайті з використанням USB-токену. Тепер і для Linux
В однієї з наших попередніх статей ми розповідали про важливість двофакторної автентифікації на корпоративних порталах компаній. Минулого разу ми продемонстрували, як налаштувати безпечну автентифікацію у web-сервері IIS.
У коментарях нас просили написати інструкцію для найпоширеніших web-серверів під Linux – nginx та Apache.
Ви просили – ми написали.
Що треба, щоби почати?
Будь-який сучасний дистрибутив Linux. Я виконував тестове налаштування у MX Linux 18.2_x64. Це, звичайно, не серверний дистрибутив, але для Debian навряд чи будуть якісь відмінності. Для інших дистрибутивів можуть трохи відрізнятися шляхи до бібліотек-конфігів.
Токен. Ми продовжуємо використовувати модель Рутокен ЕЦП PKIяка ідеально підходить за швидкісними характеристиками для корпоративного застосування.
Для роботи з токеном у Linux необхідно встановити такі пакети:
libccid libpcsclite1 pcscd pcsc-tools opensc
Виписування сертифікатів
У попередніх статтях ми спиралися на те, що сертифікати сервера та клієнтів виписуватимуться за допомогою Microsoft CA. Але якщо ми налаштовуємо все в Linux, то заразом розповімо про альтернативний спосіб виписування цих сертифікатів — не залишаючи Linux.
Як CA будемо використовувати XCA (https://hohnstaedt.de/xca/), який доступний у будь-якому сучасному дистрибутиві Linux. Всі дії, які ми будемо робити в XCA, можна зробити і в режимі командного рядка за допомогою утиліт OpenSSL і pkcs11-tool, але для більшої простоти та наочності в цій статті ми їх наводити не будемо.
Початок роботи
Встановлюємо:
$ apt-get install xca
І запускаємо:
$ xca
Створюємо нашу базу даних для CA - /root/CA.xdb
Ми рекомендуємо зберігати базу даних Certificate Authority у папці, куди є доступ лише адміністратора. Це важливо для захисту закритих ключів кореневих сертифікатів, які використовуються для підписування всіх інших сертифікатів.
Створюємо ключі та сертифікат root CA
В основі інфраструктури відкритих ключів лежить ієрархічна система. Головним у цій системі є кореневий центр сертифікації чи root CA. Його сертифікат і треба створити насамперед.
Створюємо для CA закритий ключ RSA-2048. Для цього на вкладці Приватні ключі натискаємо Новий ключ та вибираємо відповідний тип.
Задаємо ім'я для нової ключової пари. Я її назвав CA Key.
Виписуємо сертифікат CA, з використанням створеної ключової пари. Для цього переходимо на вкладку сертифікати і натискаємо Новий сертифікат.
Обов'язково вибираємо SHA-256Тому що використання SHA-1 вже не може вважатися безпечним.
Як шаблон обов'язково вибираємо [default] CA. Не забудьте натиснути на Застосувати все, інакше шаблон не застосовується.
На вкладці Тема вибираємо нашу ключову пару. Також ви можете заповнити всі основні поля сертифіката.
Створюємо ключі та сертифікат https-сервера
Аналогічно створюємо для сервера закритий ключ RSA-2048, я його назвав - Server Key.
Під час створення сертифіката вибираємо, що сертифікат сервера необхідно підписати на сертифікаті CA.
Не забуваємо вибрати SHA-256.
Як шаблон вибираємо [default] HTTPS_server. Тиснемо на Застосувати все.
Після чого на вкладці Тема вибираємо наш ключ та заповнюємо потрібні поля.
Створюємо ключі та сертифікат для користувача
Закритий ключ користувача зберігатиметься на нашому токені. Для роботи з ним необхідно встановити бібліотеку PKCS#11 з нашого сайту. Для популярних дистрибутивів ми розповсюджуємо готові пакети, які лежать тут. https://www.rutoken.ru/support/download/pkcs/. У нас також є збірки для arm64, armv7el, armv7hf, e2k, mipso32el, які можна взяти в нашому SDK https://www.rutoken.ru/developers/sdk/. Крім збірок для linux також є збірки для macOS, freebsd та android.
Додаємо новий PKCS#11 Provider у XCA. Для цього йдемо в меню Опції на вкладку PKCS#11 Provider.
Тиснемо додавати та вибираємо шлях до бібліотеки PKCS#11. У моєму випадку це usrliblibrtpkcs11ecp.so.
Як тип ключа вибираємо - ключ RSA-2048 на Рутокен ЕЦП PKI. Я назвав цей ключ Client Key.
Вводимо PIN-код. І чекаємо на завершення апаратної генерації ключової пари
Сертифікат для користувача створюємо за аналогією із сертифікатом сервера. На цей раз вибираємо шаблон [default] HTTPS_client і не забуваємо натиснути Застосувати все.
На вкладці Тема вводимо інформацію про користувача. На запит про збереження сертифіката на токен відповідаємо ствердно.
У результаті на вкладці Сертифікати у XCA має вийти приблизно така картинка.
Цього мінімального набору ключів та сертифікатів достатньо для того, щоб розпочати налаштування безпосередньо серверів.
Для налаштування нам необхідно виконати експорт сертифіката УЦ, сертифіката сервера та закритого ключа сервера.
Для цього треба вибрати потрібний запис на відповідній вкладці XCA і натиснути Експорт.
Nginx
Як встановити та запустити nginx-сервер, писати не буду — на цю тему достатньо статей в інтернеті, не кажучи вже про офіційну документацію. Приступимо відразу до налаштування HTTPS та двофакторної автентифікації по токену.
Додаємо до секції server у nginx.conf наступні рядки:
ssl_verify_client - вказує, що необхідно перевірити ланцюжок довіри до сертифіката.
ssl_verify_depth - визначає глибину пошуку довіреного кореневого сертифіката в ланцюжку. Оскільки сертифікат клієнта одразу підписаний на кореневому сертифікаті, то й глибина задана — 1. Якщо сертифікат користувача підписується на проміжному CA, то в цьому параметрі необхідно вказати 2, і так далі.
ssl_client_certificate — вказує шлях до довіреного кореневого сертифіката, який використовується для перевірки довіри до сертифіката користувача.
ssl_certificate/ssl_certificate_key — вказують шлях до сертифіката/закритого ключа сервера.
Не забуваємо виконати nginx -t, щоб перевірити, що в конфізі немає друкарських помилок, а всі файли лежать де треба і так далі.
Спробуємо спочатку зайти без токена. Отримуємо ось таку картинку:
заходимо на about: уподобання # конфіденційність, і йдемо в Security Devices…
Тиснемо Навантаженнящоб додати новий PKCS#11 Device Driver і вказуємо шлях до нашої librtpkcs11ecp.so.
Для перевірки того, що сертифікат бачиться, можна зайти в Диспетчер сертифікатів. З'явиться запит на введення PIN-коду. Після коректного введення можна перевірити, що на вкладці Your Certificates з'явився наш сертифікат із токена.
Тепер заходимо із токеном. Firefox пропонує вибрати сертифікат, який буде вибрано на сервер. Вибираємо наш сертифікат.
PROFIT!
Налаштування виконується один раз, і, як видно у вікні запиту на сертифікат, ми можемо зберегти наш вибір. Після цього при кожному вході на портал нам потрібно буде лише вставити токен і ввести PIN-код користувача, який було встановлено під час форматування. Після такої аутентифікації сервер вже знає, який користувач на нього зайшов і можна більше не робити ніяких додаткових вікон для перевірки, а відразу пускати користувача в його особистий кабінет.
Apache
Так само як і з nginx проблем із встановленням apache ні в кого не повинно виникнути. Якщо ви не знаєте, як встановити цей web-сервер, просто скористайтеся офіційною документацією.
А ми приступаємо до налаштування нашого HTTPS та двофакторної аутентифікації:
Для початку необхідно активувати mod_ssl:
$ a2enmod ssl
А потім увімкнути налаштування HTTPS сайту за промовчанням:
$ a2ensite default-ssl
Тепер редагуємо конфігураційний файл: /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
Як бачите, назви параметрів практично збігаються з назвами параметрів в nginx, тому пояснювати я їх не буду. Знову ж кому цікаві подробиці — ласкаво просимо до документації.
Тепер перезапускаємо наш сервер:
$ service apache2 reload
$ service apache2 restart
Як бачите налаштувати двофакторну автентифікацію на будь-якому веб-сервері, що в Windows, що в Linux справа однієї години максимум. А налаштування браузерів займає близько 5 хвилин. Багато хто вважає, що налаштування та робота з двофакторною автентифікацією це складно та незрозуміло. Сподіваюся, наша стаття хоч трохи, але розвінчує цей міф.
Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.
Чи потрібна інструкція з налаштування роботи TLS із сертифікатами на ГОСТ 34.10-2012: