Table of Contents | ||||
---|---|---|---|---|
|
Проверка модели устройства
- Подключите USB-токен к компьютеру.
Для определения названия модели USB-токена откройте Терминал и введите команду:
Code Block language bash lsusb
В результате в окне Терминала отобразится название модели USB-токена:
Убедитесь в том, что используете: Aktiv Rutoken ECP.
Введение
Pluggable Authentication Modules (PAM, подключаемые модули аутентификации) — это набор разделяемых библиотек, которые позволяют интегрировать различные низкоуровневые методы аутентификации в виде единого высокоуровневого API. Это позволяет предоставить единые механизмы для управления, встраивания прикладных программ в процесс аутентификации.
Для PAM существует проект pam_p11, развивающийся как часть OpenSC, позволяющий внедрить аутентификацию по токенам. Доступны два модуля аутентификации. В старых версиях (ниже 0.2.0) модуль аутентификации разделен на два:
pam_p11_openssh
: позволяет аутентифицировать пользователя по открытым ключам ssh в~/.ssh/authorized_keys
pam_p11_opensc
: аутентификация по сертификатам из файла~/.eid/authorized_certificates
Note |
---|
Проект OpenSC также предоставляет |
пакет pam_pkcs11, который представляет собой более гибкий набор модулей аутентификации. |
Мы рассмотрим конфигурацию pam_p11, |
как наиболее простое решения. Однако, pam_p11 не имеет понятия о цепочках сертификатов, списках отзыва и OCSP. |
Инструкция есть здесь: http://www.gooze.eu/printpdf/book/export/html/221
При необходимости, pam_pkcs11 можно настроить руководствуясь инструкцией (на английском, ее источник). Также имеется инструкция для Gentoo (источник). |
- Сгенерировать на токене ключевую пару RSA (проверено, что работает для длины ключа 2048 бит, с 1024 были проблемы).
- Если требуется сертификат, то с помощью OpenSSL или другого ПО сгенерировать сертификат и записать его на токен.
- Записать открытый ключ или сертификат в необходимый каталог.
В итоге выглядит это так:
Аутентификация по сертификатам
В данном разделе подробно рассмотрим действия по настройке аутентификации по сертификату X.509.
Рабочее окружение
...
Предварительная подготовка
Демонстрация работы проводится на Ubuntu 18.04. Описанная последовательность действий актуальна также для других версий Ubuntu и систем, основанных на Debian.
Для конфигурации модуля PAM необходимо установить пакеты:
Code Block | ||
---|---|---|
| ||
sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl |
Общий порядок действий
...
Настройка pam_p11
До начала работы с токеном стоит настроить модуль pam_p11 следующим образом:
Создать файл
/usr/share/pam-configs/p11
со следующим содержанием:Для версий libpam-p11 ниже 0.2.0
Code Block Name: Pam_p11
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient pam_p11_opensc.so /usr/lib/
librtpkcs11ecp.so
Для версий libpam-p11 выше или равных 0.2.0
Code Block Name: Pam_p11 Default: yes Priority: 800 Auth-Type: Primary Auth: sufficient pam_p11.so /usr/lib/librtpkcs11ecp.so
Обновить конфигурацию PAM:
Code Block language bash sudo pam-auth-update
- В появившемся диалоге необходимо выбрать удостовериться, что выбран pam_p11. Если вы хотите отключить аутентификацию по паролям, то можно отключить Unix authentication.
Создание ключей на токене
Создаем ключевую пару RSA длины 2048 бит c ID "45" (id стоит запомнить, он понадобится при создании сертификата). Аутентификация на токене происходит под сущностью пользователя.
Code Block language bash $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45
pkcs15-init --generate-key rsa/2048 --auth-id 02 --id 45
<вводим PIN пользователя>Проверим сгенерированный ключ:
...
Code Block language bash $ pkcs11-tool --
...
module /usr/lib/librtpkcs11ecp.so -O
Создание сертификата и импорт его на токен
Запускаем
openssl
Code Block language bash $ openssl
Формируем самоподписанный сертификат или заявку на сертификат:
Подгружаем модуль поддержки pkcs11:
Code Block language bash
engine_OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/
opensc-pkcs11pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:
librtpkcs11ecp.so
(dynamic) Dynamic engine loading support [Success]: SO_PATH:/usr/lib/engines/engine_pkcs11.so [Success]: ID:pkcs11 [Success]: LIST_ADD:1 [Success]: LOAD Loaded: (pkcs11) pkcs11 engine
Создаем самоподписанный сертификат в PEM-формате:
OpenSSL> req -engine pkcs11 -new -key 1:45 -keyform engine -x509 -out cert.pem -text
OpenSSL при этом предложит ввести PIN-код и заполнить информацию о сертификате. Теперь можно выйти из OpenSSL и проверить новый сертификат.... OpenSSL> req -engine pkcs11 -x509 -new -key 45 -keyform engine -out client.req -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"
Tip Если вы используете не Ubuntu 18.04, вам необходимо проверить местонахождение pkcs11.so. Он может располагаться, например, в /usr/lib/openssl/engines/. Если его найти не удается воспользуйтесь командой find.
Проверяем созданный сертификат. В текущем каталоге должен создаться файл самоподписанного сертификата с именем cert.pem.Tip title Примечание Если
Примечание: если
.$openssl verify -CAfile certпри создании сертификата в OpenSSL убрать ключ
-x509,
то на выходе получим заявку на сертификат
pem cert.pem.
cert.pem: OK
Сохраняем сертификат на токен:Code Block language
...
bash $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id 45
Занесение сертификата в список доверенных
Теперь нам необходимо
...
записать его в файл доверенных сертификатов:
Code Block language bash mkdir ~/.eid chmod 0755 ~/.eid
...
cat client.pem >> ~/.eid/authorized_certificates chmod 0644 ~/.eid/authorized_certificates
Заключение
Описанных выше действий достаточно Теперь при загрузке Ubuntu мы можем использовать токен для аутентификации по токену.
Warning |
---|
Источники
http://download.gooze.eu/pki/doc/sso/linux-smartcard-logon-using-pam-p11.pdf
http://www.opensc-project.org/opensc/wiki/QuickStart
http://forum.rutoken.ru/post/4546/#p4546
http://www.opensc-project.org/pam_p11/wiki/QuickStart
| ||||
На стадии выбора пользователя информация о подключенном токене может не обновляться динамически. Если вы подключили токен и не видите поля ввода PIN-кода, вам может понадобиться перенести фокус на "гостевой сеанс" и обратно на вашего пользователя. |
...