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 pkcs15-init$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --generatekeypairgen --key-type rsa/:2048 --auth-id 02l --id 45 <вводим PIN пользователя>
Проверим сгенерированный ключ:
Code Block language bash $ pkcs15pkcs11-tool --list-keys Using reader with a card: Aktiv Rutoken ECP 00 00 Private RSA Key [Private Key] Object Flags : [0x3], private, modifiable Usage : [0x4], sign Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local ModLength : 2048 Key ref : 1 (0x1) Native : yes Path : 3f001000100060020001 Auth ID : 02 ID : 45module /usr/lib/librtpkcs11ecp.so -O
Создание сертификата и импорт его на токен
Запускаем
openssl
Code Block language bash $ openssl
- Подгружаем модуль поддержки pkcs11
Формируем самоподписанный сертификат или заявку на сертификат:
Code Block language bash OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11librtpkcs11ecp.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-формате:
Code Block language bash ... OpenSSL> req -engine pkcs11 -x509 -new -key 1:45 -keyform engine -x509 -out certclient.pem -text
1:45 - это пара slot:id. Если OpenSSL не видит токен, то стоит попробовать другой номер слота.
OpenSSL при этом предложит ввести PIN-код и заполнить информацию о сертификате. Теперь можно выйти из OpenSSL и проверить новый сертификат.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 убрать ключ
-x509,
то на выходе получим заявку на сертификатCode Block language bash $openssl verify -CAfile cert.pem cert.pem cert .
pem: OK Сохраняем сертификат на токен:
Code Block language bash $ pkcs15pkcs11-inittool --store-certificate cert.pem --auth-id 02module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id 45 --format pem <Вводим PIN пользователя>
Занесение сертификата в список доверенных
Теперь нам необходимо
прочитать с токена сертификат с нужным ID изаписать его в файл доверенных сертификатов:
Code Block language bash mkdir ~/.eid chmod 0755 ~/.eid pkcs15-tool -r <certificate_id> > cat client.pem >> ~/.eid/authorized_certificates chmod 0644 ~/.eid/authorized_certificates
Заключение
Описанных выше действий достаточно для аутентификации по токену.
Источники
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
Теперь при загрузке Ubuntu мы можем использовать токен для аутентификации.
Warning | ||||
---|---|---|---|---|
| ||||
На стадии выбора пользователя информация о подключенном токене может не обновляться динамически. Если вы подключили токен и не видите поля ввода PIN-кода, вам может понадобиться перенести фокус на "гостевой сеанс" и обратно на вашего пользователя. |
...