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
В основе инфраструктуры открытых ключей (PKI) лежит иерархическая система. Главным в этой системе является корневой центр сертификации или root CA. Его сертификат и надо создать в первую очередь.
Создаём для CA закрытый ключ RSA-2048. Для этого на вкладке Private Keys нажимаем New Key и выбираем соответствующий тип.
Задаём имя для новой ключевой пары. Я её назвал — CA Key.
Выписываем сам сертификат CA, с использованием созданной ключевой пары. Для этого переходим на вкладку Certificates и нажимаем New Certificate.
Обязательно выбираем SHA-256, потому что использование SHA-1 уже не может считаться безопасным.
В качестве шаблона обязательно выбираем [default] CA. Не забудьте нажать на Apply all, иначе шаблон не применяется.
На вкладке Subject выбираем нашу ключевую пару. Там же вы можете заполнить все основные поля сертификата.
Создаём ключи и сертификат https-сервера
Аналогичным образом создаём для сервера закрытый ключ RSA-2048, я его назвал — Server Key.
При создании сертификата выбираем, что сертификат сервера необходимо подписать на сертификате CA.
Не забываем выбрать SHA-256.
В качестве шаблона выбираем [default] HTTPS_server. Жмём на Apply all.
После чего на вкладке Subject выбираем наш ключ и заполняем нужные поля.
Создаём ключи и сертификат для пользователя
Закрытый ключ пользователя будет храниться на нашем токене. Для работы с ним необходимо установить 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. Для этого идём в меню Options на вкладку PKCS#11 Provider.
Жмём Add и выбираем путь до библиотеки PKCS#11. В моём случае это usrliblibrtpkcs11ecp.so.
В качестве типа ключа выбираем — ключ RSA-2048 на Рутокен ЭЦП PKI. Я назвал этот ключ Client Key.
Вводим PIN-код. И ждём завершения аппаратной генерации ключевой пары
Сертификат для пользователя создаём по аналогии с сертификатом сервера. На этот раз выбираем шаблон [default] HTTPS_client и не забываем нажать Apply all.
На вкладке Subject вводим информацию о пользователе. На запрос о сохранении сертификата на токен отвечаем утвердительно.
В итоге на вкладке Сертификаты в XCA должна получиться примерно такая картинка.
Этого минимального набора ключей и сертификатов достаточно для того, чтобы приступать к настройке непосредственно серверов.
Для настройки нам необходимо выполнить экспорт сертификата УЦ, сертификата сервера и закрытого ключа сервера.
Для этого надо выбрать нужную запись на соответствующей вкладке в XCA и нажать Export.
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:preferences#privacy, и идём в Security Devices…
Жмём Load, чтобы добавить новый PKCS#11 Device Driver и указываем путь до нашей librtpkcs11ecp.so.
Для проверки того, что сертификат видится можно зайти в Certificate Manager. Отобразится запрос на ввод 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: