Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
outlinetrue
stylenone

Проверка модели устройства

  1. Подключите USB-токен к компьютеру.
  2. Для определения названия модели USB-токена откройте Терминал и введите команду:

    Code Block
    languagebash
    lsusb 

В результате в окне Терминала отобразится название модели USB-токена:

Image Added

Убедитесь в том, что используете: Aktiv Rutoken ECP.

Введение

Pluggable Authentication Modules (PAM, подключаемые модули аутентификации) — это набор разделяемых библиотек, которые позволяют интегрировать различные низкоуровневые методы аутентификации в виде единого высокоуровневого API. Это позволяет предоставить единые механизмы для управления, встраивания прикладных программ в процесс аутентификации.

Для PAM существует проект pam_p11, развивающийся как часть OpenSC, позволяющий внедрить аутентификацию по токенам. Доступны два модуля аутентификации. В старых версиях (ниже 0.2.0) модуль аутентификации разделен на два:

  1. pam_p11_openssh: позволяет аутентифицировать пользователя по открытым ключам ssh в ~/.ssh/authorized_keys
  2. pam_p11_opensc: аутентификация по сертификатам из файла ~/.eid/authorized_certificates


Note
Проект OpenSC также предоставляет
пакет
пакет pam_pkcs11, который представляет собой более гибкий набор модулей аутентификации.
Разработчики OpenSC советуют использовать его вместо
Мы рассмотрим конфигурацию pam_p11,
поскольку последний представляет собой очень простое решение (проверка наличия токена и подпись случайных данных).
как наиболее простое решения. Однако, pam_p11 не имеет понятия о цепочках сертификатов, списках отзыва и OCSP.

Инструкция есть здесь: http://www.gooze.eu/printpdf/book/export/html/221
При необходимости, pam_pkcs11 можно настроить руководствуясь инструкцией (на английском, ее источник). Также имеется инструкция для Gentoo (источник). 


Общий порядок действий для настройки PAM следующий:
  1. Сгенерировать на токене ключевую пару RSA (проверено, что работает для длины ключа 2048 бит, с 1024 были проблемы).
  2. Если требуется сертификат, то с помощью OpenSSL или другого ПО сгенерировать сертификат и записать его на токен.
  3. Записать открытый ключ или сертификат в необходимый каталог.

В итоге выглядит это так:

Image Removed

Аутентификация по сертификатам

 В данном разделе подробно рассмотрим действия по настройке аутентификации по сертификату X.509.

Рабочее окружение

...

Image Added

Предварительная подготовка

Демонстрация работы проводится на Ubuntu. Описанная последовательность действий актуальна также для других версий Ubuntu и систем, основанных на Debian.

Для конфигурации модуля PAM необходимо установить пакеты:

Code Block
languagebash
sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl
Warning

Если у вас в ОС установлен OpenSSL 3.х, необходимо обновить библиотеку libp11.

Для этого необходимо выполнить следующие действия: 

Code Block
languagebash
$ sudo apt-get install automake autoconf libssl-dev pkgconf gcc git libtool
$ git clone https://github.com/OpenSC/libp11.git
$ cd libp11
$ autoreconf -i
$ ./configure && make && sudo make install
$ sudo mv /usr/lib/x86_64-linux-gnu/libp11.so.3 /usr/lib/x86_64-linux-gnu/libp11.so.3_orig
$ sudo ln -s /usr/local/lib/libp11.so.3 /usr/lib/x86_64-linux-gnu/libp11.so.3

Общий порядок действий

Настройка pam_p11

До начала работы с токеном стоит настроить модуль pam_p11 следующим образом:

  1. Создать файл   /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/
    opensc-pkcs11.so
    • 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
  2. Обновить конфигурацию PAM:

    Code Block
    languagebash
    sudo pam-auth-update
     
  3.  В появившемся диалоге необходимо выбрать удостовериться, что выбран pam_p11. Если вы хотите отключить аутентификацию по паролям, то можно отключить Unix authentication. 

Создание ключей на токене

  1. Необходимо скачать библиотеку rtpkcs11ecp по ссылке https://www.rutoken.ru/support/download/pkcs/ и установить ее в систему.
  2. Создаем ключевую пару RSA длины 2048 бит c ID "45" (id стоит запомнить, он понадобится при создании сертификата). Аутентификация на токене происходит под сущностью пользователя.

    Code Block
    languagebash
    pkcs15-init$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --generatekeypairgen --key-type rsa/:2048 --auth-id 02 l --id 45
    <вводим PIN пользователя>

     

  3. Проверим сгенерированный ключ:

    Code Block
    languagebash
    $ 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

  4. Запускаем openssl

    Code Block
    languagebash
    $ openssl


  5. Подгружаем модуль поддержки pkcs11

    Формируем самоподписанный сертификат или заявку на сертификат:

    Code Block
    languagebash
    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
    languagebash
    ...
    OpenSSL> req -engine pkcs11 -x509 -new -key 10:45 -keyform engine -x509 -out certclient.pem -text
    1:45 - это пара slot:id. Если OpenSSL не видит токен, то стоит попробовать другой номер слота.
    OpenSSL при этом предложит ввести PIN-код и заполнить информацию о сертификате. Теперь можно выйти из OpenSSL и проверить новый сертификат.
    Проверяем созданный сертификат. В текущем каталоге должен создаться файл самоподписанного сертификата с именем cert.pem.
    Примечание: если
    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.

    Tip
    titleПримечание

    Если при создании сертификата в OpenSSL убрать ключ -x509, то на выходе получим заявку на сертификат.

    Создание сертификата и импорт его на токен через OpenSSL 3.x

    Настраиваем конфигурационный файл по инструкции
    Формируем самоподписанный сертификат или заявку на сертификат:

    Code Block
    languagebash
    $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"



  6. Сохраняем сертификат на токен:

    Code Block
    languagebash
    $ pkcs15pkcs11-inittool --store-certificate cert.pem --auth-id 02module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id 45 --format pem
    <Вводим PIN пользователя>

    Занесение сертификата в список доверенных

  7. Теперь нам необходимо

...

  1. записать его в файл доверенных сертификатов:

    Code Block
    languagebash
    mkdir ~/.eid
    chmod 0755 ~/.eid
    

...

  1. cat client.pem >> ~/.eid/authorized_certificates
    chmod 0644 ~/.eid/authorized_certificates

Заключение

Описанных выше действий достаточно Теперь при загрузке Ubuntu мы можем использовать токен для аутентификации по токену.

Источники

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


...

Warning
iconfalse
titleПримечание

На стадии выбора пользователя информация о подключенном токене может не обновляться динамически. Если вы подключили токен и не видите поля ввода PIN-кода, вам может понадобиться перенести фокус на "гостевой сеанс" и обратно на вашего пользователя.