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, который представляет собой более гибкий набор модулей аутентификации.
Мы рассмотрим конфигурацию pam_p11, как наиболее
простого
простое решения. Однако, pam_p11 не имеет понятия о цепочках сертификатов, списках отзыва и OCSP. При необходимости, pam_pkcs11 можно настроить
руководствуясь
руководствуясь инструкцией (на английском, ее источник). Также имеется инструкция для Gentoo (источник). 


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

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

Image Modified

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

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

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

...

...

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

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

Настройка 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/
    i386-linux-gnu/opensc-pkcs11.so Tip

    Если вы используете старую версию OpenSC, вам будет необходимо проверить местонахождение 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/
    opensc-pkcs11
    • librtpkcs11ecp.so


  2. Обновить конфигурацию PAM:

    Code Block
    languagebash
    sudo pam-auth-update

     


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

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

...

Подготовим токен. 

Code Block
languagebash
$ pkcs15-init --E
$ pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk ""
$ pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize

...

  1. Создаем ключевую пару RSA длины 2048 бит c ID "45" (id стоит запомнить, он понадобится при создании сертификата). Аутентификация на токене происходит под сущностью пользователя.

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

     

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

    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

    Создание сертификата и импорт его на токен

     


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

    Code Block
    languagebash
    $ sudo openssl


  4. Подгружаем модуль поддержки 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 1:45 -keyform engine -x509 -out certclient.pem -text

    Где 1:45 - это пара slot:id (который мы указывали в п.5). OpenSSL предложит ввести PIN-код и заполнить информацию о сертификате. 

  5. Выйдем из OpenSSL.

    Code Block
    exit
  6. 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.


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

    Если

    Проверяем созданный сертификат. В текущем каталоге должен создаться файл самоподписанного сертификата с именем cert.pem.
    Примечание: если

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

    bash
    Code Block
    language

    $openssl verify -CAfile cert.pem cert.pem
    cert.pem: OK


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

    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 пользователя>

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

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

    прочитать с токена сертификат с нужным ID и

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

    Code Block
    languagebash
    mkdir ~/.eid
    chmod 0755 ~/.eid
    pkcs15-tool -r <certificate_id> > cat client.pem >> ~/.eid/authorized_certificates
    chmod 0644 ~/.eid/authorized_certificates


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


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

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

 

...