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 или другого ПО сгенерировать сертификат и записать его на токен.
- Записать открытый ключ или сертификат в необходимый каталог.
В итоге выглядит это так:
Рабочее окружение
...
Предварительная подготовка
Демонстрация работы проводится на Ubuntu. Описанная последовательность действий актуальна также для других версий Ubuntu и систем, основанных на Debian.
Для конфигурации модуля PAM необходимо установить пакеты:
Code Block | ||
---|---|---|
| ||
sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl |
Warning | |||||
---|---|---|---|---|---|
Если у вас в ОС установлен OpenSSL 3.х, необходимо обновить библиотеку libp11.Для этого необходимо выполнить следующие действия:
|
...
Общий порядок действий
Настройка 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.
Создание ключей на токене
- Необходимо скачать библиотеку rtpkcs11ecp по ссылке https://www.rutoken.ru/support/download/pkcs/ и установить ее в систему.
Создаем ключевую пару 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 02 l --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 1.1.x
Запускаем
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 10:45 -keyform engine -x509 -out certclient.pem -text
1:45 - это пара slot:id. Если OpenSSL не видит токен, то стоит попробовать другой номер слота.
OpenSSL при этом предложит ввести PIN-код и заполнить информацию о сертификате. Теперь можно выйти из OpenSSL и проверить новый сертификат.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,
то на выходе получим заявку на сертификат.Создание сертификата и импорт его на токен через OpenSSL 3.x
Настраиваем конфигурационный файл по инструкции
Формируем самоподписанный сертификат или заявку на сертификат:Code Block language bash $openssl verify -CAfile cert.pem cert.pem cert.pem: OK$ OPENSSL_CONF=/path/to/engine.conf openssl req -engine pkcs11 -x509 -new -key 0:45 -keyform engine -out client.pem -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"
Сохраняем сертификат на токен:
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
Заключение
Описанных выше действий достаточно
Теперь при загрузке 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-кода, вам может понадобиться перенести фокус на "гостевой сеанс" и обратно на вашего пользователя. |
...