Page tree

Versions Compared

Key

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

Table of Contents
maxLevel3
minLevel2


Info

Подключите устройств семейства Рутокен ЭЦП к компьютеру.

Перед началом работы, установите следующие пакеты:

Code Block
sudo yumdnf update
sudo yumdnf install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit


Загрузите модуль librtpkcs11ecp.so и установите:

Code Block
sudo rpm -i librtpkcs11ecp-2X.0X.4X.0X-1X.x86_64.rpm

Создание ключей и сертификатов

Для Проверьте наличие  libpkcs11.so по пути: /usr/lib64/engines-1.1/. Если ее нет, то для начала установите libpkcs11.so для того, чтобы OpenSSLL OpenSSL смог общаться к РутокенамРутокеном.

Способ 1

Для этого соберите библиотеку libp11 из репозитория. Вместе с ней идет libpkcs11.so начиная с версии 0.4.

...

Вы можете пропустить данный раздел, если у вас уже имеются необходимые RSA ключи.
Если ключей нет, ниже команда по для их созданию:

Code Block
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45

Параметр id задает идентификатор ключевой пары.


Теперь нужно получить сертификат:

  • создайте самоподписанный сертификат:
Code Block
openssl

OpenSSL> openssl engine dynamic -pre SO_PATH:/usr/lib64/engines-1.1/libpkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so

OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -x509 -out cert.crt -outform DER


  • или создайте запрос на сертификат для передачи его в УЦ:

Code Block
openssl

OpenSSL> engine dynamic -pre SO_PATH:/usr/lib64/engines-1.1/libpkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so

OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -out request.req


Сохраните сертификат на токенеПоместите его на токен:

Code Block
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45

Проверьте, что токен подключен и сертификаты с ключами на нем имеютсясохранены сертификаты и ключи.

Добавление сертификата в список доверенных 

Создайте базу данных доверенных сертификатов

Code Block
sudo mkdir /etc/pam_pkcs11/nssdb

sudo chmod 0644777 /etc/pam_pkcs11/nssdb

sudo certutil -d /etc/pam_pkcs11/nssdb -N # создание базы данных

sudo modutil -dbdir /etc/pam_pkcs11/nssdb/ -add p11-kit-trust -libfile /usr/lib64/pkcs11/p11-kit-trust.so

...

Выгрузите ваш сертификат с токена (если вы пользовались вышеописанной инструкцией для получения сертификата вышеописанной инструкцией , то ID = 45):

Code Block
pkcs11-tool --module=/usr/lib64/librtpkcs11ecp.so -l -r -y cert -d <ID> -o cert.crt

...

Добавьте сертификат в доверенные:

Code Block
sudo cp cert.crt /etc/pki/ca-trust/source/anchors/ # команда вводится из директории, в которую был помещён сертификат

sudo update-ca-trust force-enable

sudo update-ca-trust extract # может занять некоторое время


Настройка pam_pkcs11

Создайте (например, на рабочем столе) текстовый файл pam_pkcs11.conf со следующим содержимым:

Code Block
pam_pkcs11 {

  nullok  nullok = false;

  debug  debug = truefalse;

  use  use_first_pass = false;

  use  use_authtok = false;

  card  card_only = false;

  wait  wait_for_card = false;

  use  use_pkcs11_module = rutokenecp;

 

  #  # Aktiv Rutoken ECP

  pkcs11  pkcs11_module rutokenecp {

    module    module = /usr/lib64/librtpkcs11ecp.so;

    slot    slot_num = 0;

    support    support_thread = true;

    ca    ca_dir = /etc/pam_pkcs11/cacerts;

    crl    crl_dir = /etc/pam_pkcs11/crls;

    cert    cert_policy = signature;

    }

 

  use  use_mappers = subjectdigest;

 

  mapper  mapper_search_path = /usr/lib64/pam_pkcs11;

 

  mapper subject  mapper digest {

        debug   debug = truefalse;

        module   module = internal;

        ignorecase   algorithm = false"sha1";

        mapfile   mapfile = file:///etc/pam_pkcs11/subjectdigest_mapping;

    }

}

Поместите файл в каталог /etc/pam_pkcs11/:

...

Code Block
cd /etc/pam_pkcs11/

sudo mv pam_pkcs11.conf pam_pkcs11.conf.default #резервное копирование

sudo mkdir cacerts crls

sudo cp /path/to/your/pam_pkcs11.conf /etc/pam_pkcs11/

...


 Регистрация модуля PAM PKCS11 для аутентификации в системе 

Подключите модуль к системе авторизации PAM:

Code Block
sudo vim /etc/pam.d/system-auth
# Для входа по Рутокена на экране приветствия 
sudo vim /etc/pam.d/password-auth


Добавьте Перед первым использованием модуля pam_unix добавьте туда строку со следующим содержимым, перед первым ипользованием модуля pam_unix:

Code Block
auth   sufficient             pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so


Сохраните файл и узнайте описание поля вашего сертификата с помощью следующей команды:

Code Block
sudo pkcs11_inspect

На выходе вы увидите сообщение:

...

В результате отобразится сообщение:

[user@redos ~]$ sudo pkcs11_inspect
PIN for token: 
Printing data for mapper digest:
CB:13:CA:34:AC:04:CD:BF:A6:17:29:2F:C8:00:6A:D5:54:B8:0B:BB

Скопируйте строчку с описанием сертификата в файл /etc/pam_pkcs11/subjectdigest_mapping в формате:Вывод

Code Block
<вывод команды pkcs11_

...

inspect> -> <имя_пользователя>

...


Пример заполнения файла:

...

[user@redos ~]$ sudo cat /etc/pam_pkcs11/digest_mapping 
CB:13:CA:34:AC:04:CD:BF:A6:17:29:2F:C8:00:6A:D5:54:B8:0B:BB -> user



Попробуйте аутентифицироваться:

Code Block
su lo1ol

Image Removed

В экране приветствия аналогично:

...

<username>

Терминал должен запросить PIN код рутокена:

[user@redos ~]$ su user
Smart card found.
Добро пожаловать Rutoken ECP <no label>!
Smart card PIN: 
verifying certificate
Checking signature
[user@redos ~]$ 

В окне экрана приветствия аналогично:

Image Added


Настройка автоблокировки

В состав пакета libpam-pkcs11 входит утилита pkcs11_eventmgr, которая позволяет выполнять различные действия при возникновении событий PKCS#11.

Для настройки pkcs11_eventmgr служит файл конфигурации - /etc/pam_pkcs11/pkcs11_eventmgr.conf

Пример файла конфигурации представлен ниже:

Code Block
languagebash
pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = /usr/lib64/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        action = "cinnamon-screensaver-command --lock";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

После этого добавьте приложение pkcs11_eventmgr в автозагрузку и перезагрузите компьютер.


Для этого создайте файл /etc/xdg/autostart/smartcard-screensaver.desktop

Code Block
languagebash
[Desktop Entry]
Type=Application
Name=Smart Card Screensaver
Comment=Application to lock screen on smart card removal.
Exec=/usr/bin/pkcs11_eventmgr daemon