Что надо, чтобы начать?
- Любой современный дистрибутив Linux. Я выполнял тестовую настройку в MX Linux 18.2_x64. Это конечно не серверный дистрибутив, но для Debian вряд ли будут какие-то отличия. Для других дистрибутивов могут слегка различаться пути до библиотекконфигов.
- Токен. Мы продолжаем использовать модель , которая идеально подходит по скоростным характеристикам для корпоративного применения.
- Для работы с токеном в Linux необходимо установить следующие пакеты:
libccid libpcsclite1 pcscd pcsc-tools opensc
Немного вводных об astra linux directory (ald) и jacarta pki
Домен
Astra Linux Directory (ALD)
предназначен для организации единого пространства пользователей (домена локальной вычислительной сети) в автоматизированных системах.
ALD использует технологии LDAP, Kerberos5, Samba/CIFS и обеспечивает:
— это линейка PKI-токенов для строгой аутентификации пользователей в корпоративных системах, безопасного хранения ключевых контейнеров программных СКЗИ и цифровых сертификатов российского производителя – компании
В среде Astra Linux Directory (ALD) электронные ключи JaCarta PKI могут использоваться для двухфакторной аутентификации пользователя в домене ALD и отказа от паролей. Кроме того, с этими же электронными ключами можно выполнять различные сценарии внутри ОС, после аутентификации, такие, как: электронная подпись, хранение ключевых контейнеров, доступ к Web-ресурсам, проброс ключа в сессии MS Windows. Доступ к VDI сервисам, таким, как VmWare или Citrix.
Начало работы
- Устанавливаем:
$ apt-get install xca
- И запускаем:
$ xca
- Создаём нашу базу данных для CA — /root/CA.xdb
Мы рекомендуем хранить базу данных Certificate Authority в папке, куда есть доступ только у администратора. Это важно для защиты закрытых ключей корневых сертификатов, которые используются для подписывания всех остальных сертификатов.
Проверяем, что Рутокен ЭЦП 2.0 работает в системе
В терминале выполняем$ pkcs11-tool –module /usr/lib/librtpkcs11ecp.so -TЕсли увидите строку Rutoken ECP <no label> – значит всё хорошо.
Устанавливаем необходимые пакеты
sudo apt-get install libccid pcscd openscЕсли хотите добавить блокировку рабочего стола скринсейвером – дополнительно установите пакет libpam-pkcs11.
Добавляем PAM-модуль с поддержкой ГОСТов
Загружаем библиотеку с Копируем содержимое папки PAM librtpam.so.1.0.0 в системную папку/usr/lib/ или /usr/lib/x86_64-linux-gnu/или /usr/lib64
Устанавливаем пакет с librtpkcs11ecp.so
Загружаем и устанавливаем DEB- или RPM-пакет по ссылке:
Считываем сертификат
Проверяем, что на устройстве есть сертификат$ pkcs11-tool –module /usr/lib/librtpkcs11ecp.so -OЕсли после строчки:Using slot 0 with a present token (0x0)
- выводится информация о ключах и сертификатах, то необходимо считать сертификат и сохранить на диск. Для этого выполните следующую команду, где вместо {id} нужно подставить ID-сертификата, который вы увидели в выводе предыдущей команды:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
В случае если файл cert.crt создан переходим к пункту 6). - нет ничего, значит устройство пустое. Обратитесь к администратору или создайте ключи и сертификат самостоятельно, следуя следующему пункту.
1) Создаём тестовый сертификат
Внимание! Описанные способы создания ключей и сертификатов подходят для тестирования и не предназначены для применения в боевом режиме. Для этого нужно использовать ключи и сертификаты, изданные доверенным центром сертификации вашей организации или аккредитованным удостоверяющим центром.
PAM-модуль создан защищать локальные компьютеры и подразумевает работу в небольших организациях. Поскольку пользователей немного, Администратор может сам следить за отзывом сертификатов и вручную блокировать учетные записи, как и за сроком действия сертификатов. PAM-модуль пока не умеет проверять сертификаты по CRL и строить цепочки доверия.
Регистрируем сертификат в системе
Убедитесь, что ваш сертификат выглядит как base64 файл:
Если ваш сертификат выглядит так:
то нужно сконвертировать сертификат из формата DER в PEM-формат(base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEMСнова проверяем, что теперь все в порядке.
Добавляем сертификат в список доверенных сертификатов$ mkdir ~/.eid$ chmod 0755 ~/.eid$ cat cert.pem >> ~/.eid/authorized_certificates$ chmod 0644 ~/.eid/authorized_certificatesПоследняя строка защищает список доверенных сертификатов от случайного или намеренного изменения другими пользователями. Это исключает ситуацию, когда кто-то добавит сюда свой сертификат и сможет входить в систему от вашего имени.
Настраиваем аутентификацию
Настройка нашего модуля PAM совершенно стандартна и делается точно также, как и настройки других модулей. Создаём в файл /usr/share/pam-configs/rutoken-gost-pam содержащий полное имя модуля, включен ли он по умолчанию, приоритет модуля и параметры аутентификации.В параметрах аутентификации есть требования к успешности операции:
- required (требуемый): такие модули должны вернуть положительный ответ. Если результат вызова модуля содержит отрицательный ответ, это приведёт к ошибке аутентификации. Запрос будет сброшен, но остальные модули будут вызваны.
- requisite (необходимый): похож на required, но сразу же приводит к сбою аутентификации и игнорирует остальные модули.
- sufficient (достаточный): если перед таким модулем ни один из модулей required или sufficient не вернул отрицательного результата, то модуль вернёт положительный ответ. Оставшиеся модули будут проигнорированы.
- optional (дополнительный): если в стеке нет модулей required и ни один из модулей sufficient не вернул положительного результата, то хотя бы один из модулей optional должен вернуть положительный ответ.
Полное содержание файла /usr/share/pam-configs/rutoken-gost-pam:Name: Rutoken PAM GOSTDefault: yesPriority: 800Auth-Type: PrimaryAuth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so
сохраняем файл, после этого выполняем$ sudo pam-auth-updateв появившемся окне ставим звёздочку около Rutoken PAM GOST и нажимаем OK
Проверяем настройку
Чтобы понять что всё настроено, но при этом не потерять возможность входа в систему введите команду$ sudo loginВведите имя пользователя. Всё настроено правильно, если система потребует PIN-код устройства.
Настраиваем блокировку компьютера при извлечении токена
В состав пакета libpam-pkcs11 входит утилита pkcs11_eventmgr, которая позволяет выполнять различные действия при возникновении событий PKCS#11.Для настройки pkcs11_eventmgr служит файл конфигурации: /etc/pam_pkcs11/pkcs11_eventmgr.confДля различных дистрибутивов Линукс, команда которая вызывает блокировку учетной записи при извлечении смарт-карт или токена будет отличаться. См. event card_remove.Пример файла конфигурации представлен ниже:
pkcs11_eventmgr
{
# Запуск в бэкграунде
daemon = true;
# Настройка сообщений отладки
debug = false;
# Время опроса в секундах
polling_time = 1;
# Установка тайм-аута на удаление карты
# По-умолчанию 0
expire_time = 0;
# Выбор pkcs11 библиотеки для работы с Рутокен
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Действия с картой
# Карта вставлена:
event card_insert {
# Оставляем значения по умолчанию (ничего не происходит)
on_error = ignore ;
action = "/bin/false";
}
# Карта извлечена
event card_remove {
on_error = ignore;
# Вызываем функцию блокировки экрана
# Для GNOME
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# Для XFCE
# action = "xflock4";
# Для Astra Linux (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Карта долгое время извлечена
event expire_time {
# Оставляем значения по умолчанию (ничего не происходит)
on_error = ignore;
action = "/bin/false";
}
}
После этого добавьте приложение pkcs11_eventmgr в автозагрузку. Для этого отредактируйте файл .bash_profile:$ nano /home/<имя_пользователя>/.bash_profileДобавьте в конец файла строку pkcs11_eventmgr и перезагрузитесь.
Описанные шаги по настройке операционной системы можно использовать как инструкцию в любом современном дистрибутиве Linux, включая отечественные.
Apache
Так же как и с nginx проблем с установкой apache ни у кого не должно возникнуть. Если же вы не знаете, как установить этот web-сервер, просто воспользуйтесь официальной документацией.
Librtpam
Разработанный компанией «Актив» модуль добавляет двухфакторную аутентификацию пользователей по смарт-картам или USB-токенам с помощью асимметричных ключей по последним стандартам отечественной криптографии.
Рассмотрим принцип его работы:
- на токене хранится сертификат пользователя и его закрытый ключ;
- сертификат сохранён в домашнем каталоге пользователя как доверенный.
Процесс аутентификации происходит следующим образом:
- На Рутокене выполняется поиск личного сертификата пользователя.
- Запрашивается PIN-код токена.
- Происходит подпись случайных данных на закрытом ключе непосредственно в чипе Рутокена.
- Полученная подпись проверяется с помощью открытого ключа из сертификата пользователя.
- Модуль возвращает вызвавшему приложению результат проверки подписи.
Можно аутентифицироваться по ключам ГОСТ Р 34.10-2022 (длины 256 или 512 бит) или устаревшему ГОСТ Р 34.10-2001.
За безопасность ключей можно не беспокоиться – они генерируются непосредственно в Рутокене и никогда не покидают его память во время криптографических операций.
Рутокен ЭЦП 2.0 сертифицирован ФСБ и ФСТЭК по НДВ 4, поэтому может применяться в информационных системах, обрабатывающих конфиденциальную информацию.
Настройка клиента. проверка работоспособности
Создайте на клиенте каталог
/etc/krb5/
. Скопируйте в
/etc/krb5/
сертификат CA
(cacert.pem)
c сервера.
Настройте kerberos в /etc/krb5.conf. Секцию [libdefaults] дополните следующими строками.
Нужна ли инструкция по настройке работы tls с сертификатами на гост 34.10-2022:
Проголосовали 44 пользователя. Воздержались 9 пользователей.
Подготовка смарт-карты. выпуск ключей и сертификата пользователя
Убедитесь в том, что установлены пакеты
libengine-pkcs11-opensslopensc
. Подключите устройство, которое следует подготовить.
Проинициализируйте устройство, установите PIN-код пользователя. Помните, что инициализация устройства удалит все данные на JaCarta PKI без возможности восстановления.
Для инициализации необходимо воспользоваться утилитой pkcs11-tool.
pkcs11-tool –slot 0 –init-token –so-pin 00000000 –label ‘JaCarta PKI’ –module /lib64/libASEP11.so,
где:
–slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.;
–init-token – команда инициализации токена;
–so-pin 00000000 – PIN-код администратора JaCarta PKI. По умолчанию имеет значение 00000000;
–label ‘JaCarta PKI’ – метка устройства;
–module /lib64/libASEP11.so — указывает путь до библиотеки libASEP11.so. Устанавливается в рамках пакета idprotectclient см. раздел «Установка драйверов на сервер и клиент».
Для задания PIN-кода пользователя используйте команду:
pkcs11-tool –slot 0 –init-pin –so-pin 00000000 –login –pin 11111111 –module /lib64/libASEP11.so,
где:
–slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.;
–init-pin – команда установки PIN-кода пользователя;
–so-pin 00000000 – PIN-код администратора JaCarta PKI. По умолчанию имеет значение 00000000;
Практическое использование
Подойдёт практически любой современный Линукс, для примера мы будем использовать xUbuntu 18.10.
Пример демо-зоны
Предполагается, что ALD уже развернут, существует минимум один доменный пользователь, который может аутентифицироваться по паролю, время клиента и сервера совпадают.
Проверяем работу в firefox
Раз уж мы всё полностью делаем в Linux, то будем считать, что и наши пользователи тоже работают в Linux (если у них Windows, то .
- Запускаем Firefox.
- Попробуем в начале зайти без токена. Получаем вот такую картинку:
- Заходим на about:preferences#privacy, и идём в Security Devices…
- Жмём Load, чтобы добавить новый PKCS#11 Device Driver и указываем путь до нашей librtpkcs11ecp.so.
- Для проверки того, что сертификат видится можно зайти в Certificate Manager. Отобразится запрос на ввод PIN-кода. После корректного ввода можно проверить, что на вкладке Your Certificates появился наш сертификат с токена.
- Теперь заходим с токеном. Firefox предлагает выбрать сертификат, который будет выбран на сервер. Выбираем наш сертификат.
- PROFIT!
Настройка выполняется один раз, и как видно в окне запроса на сертификат мы можем сохранить наш выбор. После этого при каждом входе на портал нам надо будет только вставить токен и ввести PIN-код пользователя, который был задан при форматировании. После такой аутентификации сервер уже знает какой пользователь на него зашёл и можно больше не делать никаких дополнительных окон для проверки, а сразу пускать пользователя в его личный кабинет.
Простой путь (через браузер)
Для получения тестового сертификата используйте . Процесс займёт не более 5 минут.
Путь гика (через консоль и, возможно, компилятор)
Проверьте версию OpenSC $ opensc-tool –versionЕсли версия меньше чем 0.20, то обновитесь или соберите из нашего GitHub-а (на момент выхода этой статьи релиз 0.20 ещё не выпущен) или из ветки master основного проекта OpenSC не позднее
Генерируем ключевую пару с параметрами:–key-type: GOSTR3410-2022-512:А (ГОСТ-2022 512 бит c парамсетом А), GOSTR3410-2022-256:A (ГОСТ-2022 256 бит с парамсетом A)
–id: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII. Используйте только ASCII-коды печатных символов, т.к. id нужно будет передать OpenSSL в виде строки. Например, ASCII-кодам “3132” соответствует строка «12». Для удобства, можно воспользоваться .
$ ./pkcs11-tool –module /usr/lib/librtpkcs11ecp.so –keypairgen –key-type GOSTR3410-2022-512:A -l –id 3132
Далее будем создавать сертификат. Ниже будет описано два пути: первый через УЦ (мы будем использовать тестовые УЦ), второй – самоподписанный. Для этого сначала надо установить и настроить OpenSSL версии 1.1 или новее для работы с Рутокен через специальный модуль rtengine используя руководство .Например: для ‘–id 3132’ в OpenSSL надо указывать «pkcs11:id=12«.
Можно воспользоваться услугами тестового УЦ, коих много, например, , и , для этого создадим запрос на сертификат
Другой вариант – можно поддаться лени и создать самоподписанный$ openssl req -utf8 -new -keyform engine -key “pkcs11:id=12” -engine rtengine -out req.csr
Загружаем сертификат на устройство$ openssl req -utf8 -x509 -keyform engine -key “pkcs11:id=12” -engine rtengine -out cert.cer
Создаём ключи и сертификат 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 выбираем нашу ключевую пару. Там же вы можете заполнить все основные поля сертификата.
Установка драйверов на сервер и клиент
Для обеспечения работы со смарт-картой
JaCarta PKI
на клиенте и сервере установите следующие пакеты:
libccid, pcscd, libpcsclite1
. После установки этих обязательных пакетов установите
, который можно загрузить с официального сайта «Аладдин Р.Д.».
Для обеспечения работы со смарт-картой подсистемы Kerberos добавочно к предустановленным пакетам ald/kerberos установите пакет krb5-pkinit на клиенте и сервере.
Для обеспечения возможности выпуска ключей и сертификатов на JaCarta PKI на сервере также установите пакеты libengine-pkcs11-openssl и opensc.
Установка и настройка центра сертификации на сервере
В качестве центра сертификации
(CA)
будет использован
OpenSSL
OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT.
Заключение
ПК с Linux в российских госструктурах становятся все популярнее, а настроить надёжную двухфакторную аутентификацию в этой ОС не всегда просто. Будем рады этим руководством помочь решить “проблему паролей” и надёжно защитить доступ к ПК, не затратив на это много времени.