Page tree

Versions Compared

Key

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

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

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

...

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

1 Устанавливаем необходимые пакеты

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

2 Добавляем PAM модуль с поддержкой ГОСТ-2012

Загружаем библиотеку через браузер

https://download.rutoken.ru/Rutoken/PAM/1.0.0/x86_64/librtpam.so.1.0.0

или через Терминал

Code Block
languagebash
 $ wget --no-check-certificate https://download.rutoken.ru/Rutoken/PAM/1.0.0/x86_64/librtpam.so.1.0.0


Копируем в системную папку

Code Block
languagebash
$ sudo cp libpam_p11_opensclibrtpam.so.1.0.1.80 /usr/lib/x86_64-linux-gnu/
$ sudo chmod 644 /usr/lib/x86_64-linux-gnu/libpam_p11_opensclibrtpam.so.1.0.1.80

3 Добавляем библиотеку librtpkcs11ecp.so

Загружаем библиотеку через браузер.

Для 64-битной системы используйте ссылку:

https://download.rutoken.ru/Rutoken/PKCS11Lib/Current/Linux/x64/librtpkcs11ecp.so

Для 32-битной системы используйте ссылку:

https://download.rutoken.ru/Rutoken/PKCS11Lib/Current/Linux/x86_64x32/librtpkcs11ecp.so

или

...

через консоль

Пуск - Утилиты - Терминал Fly

Для 64-битной системы используйте:

Code Block
languagebash
 $ wget --no-check-certificate https://download.rutoken.ru/Rutoken/PKCS11Lib/Current/Linux/x86_64/x64/librtpkcs11ecp.so

Для 32-битной системы используйте:

Code Block
languagebash
$ wget --no-check-certificate https://download.rutoken.ru/Rutoken/PKCS11Lib/Current/Linux/x32/librtpkcs11ecp.so

Копируем в системную папку  папку  

Code Block
languagebash
$ sudo cp librtpkcs11ecp.so /usr/lib/x86_64-linux-gnu/
$ sudo chmod 644 /usr/lib/x86_64-linux-gnu/librtpkcs11ecp.so

...

4 Проверяем что Рутокен ЭЦП работает в системе

В Терминале

Code Block
languagebash
$ pkcs11-tool --module /usr/lib/x86_64-linux-gnu/librtpkcs11ecp.so -T 

В случае если увидите вот такую строку, значит все хорошо.

Rutoken ECP <no label> 

...

5 Считываем сертификат

Проверяем что на устройстве есть сертификат

...

Using slot 0 with a present token (0x0) 

нет ничего, значит устройство пустое. Обратитесь к администратору или создайте ключи и сертификат самостоятельно следуя пункту 5.1

Если после строчки

Using slot 0 with a present token (0x0)
  • выводится информация о ключах и сертификатах, то необходимо считать сертификат и сохранить на диск. Для этого выполните следующую команду, где вместо {id} нужно подставьте ID-сертификата, который вы увидели в выводе предыдущей команды:
Code Block
languagebash
$ pkcs11-tool --module /usr/lib/x86_64-linux-gnu/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt

В случае, если файл cert.crt создан переходим к пункту 6

  • нет ничего, значит устройство пустое. Обратитесь к администратору или создайте ключи и сертификат самостоятельно следуя следующему шагу

5.1 Создаем самоподписанный сертификат

Info
Собирайте ветку pkcs11-tool с поддержкой ГОСТ-2012 из нашего GitHub-а, пока не выпущен релиз OpenSC новее чем 0.19.0.
Или можно собирать утилиту из ветки master OpenSC взяв коммит 8cf1e6f

Откройте Терминал

генерируем Генерируем ключевую пару с параметрами:

- ГОСТ-2012 512 бит (параметр --key-type: GOSTR3410-2012-512:A в команде ниже) или ГОСТ-2012 (256) бит: --key-type GOSTR3410-2012-256:A.А (ГОСТ-2012 512 бит c парамсетом А),  GOSTR3410-2012-256:A (ГОСТ-2012 256 бит с парамсетом A)

--id:  идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.  Используйте только ASCII-коды печатных символов, т.к. id нужно будет передать OpenSSL в виде строки. Например ASCII-кодам “3132” соответствует строка "12".

Info

Для удобства, можно воспользоваться онлайн-сервисом конвертации строки в ASCII-коды.

 

Code Block
languagebash
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

...

Чтобы использовать этот id ключевой пары, созданной через pkcs11-tool, в OpenSSL – надо использовать hex-символы из таблицы ASCII, соответствующие этим кодам.

Info

Для удобства, можно воспользоваться онлайн-сервисом конвертации :  https://www.rapidtables.com/convert/number/hex-to-ascii.htmlACSII-кодов в строку.


Например: для ‘--id 3132’ в OpenSSL надо указывать "pkcs11:id=12".  

...

Code Block
languagebash
$ pkcs11-tool --module /usr/x86_64-linux-gnu/librtpkcs11ecp.so -l -y cert -w cert.crt --id 3132

6 Регистрируем сертификат в системе

Откройте Терминал

Конвертируем сертификат в текстовый формат

...


Code Block
languagebash
mkdir ~/.eid
chmod 0755 ~/.eid
cat cert.pem >> ~/.eid/authorized_certificates
chmod 0644 ~/.eid/authorized_certificates


7 Настраиваем аутентификацию 

Откройте Терминал

Code Block
languagebash
$ sudo nano /usr/share/pam-configs/p11rtpam-gost

записываем создайте в файл следующую информациюс содержимым

Code Block
languagebash
Name: Pam_p11Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient usr/lib/x86_64-linux-gnu/libpam_p11_opensclibrtpam.so.1.0.1.80 /usr/lib/x86_64-linux-gnu/librtpkcs11ecp.so
сохраняем файл, нажимаем Alt Ctrl + X, а затем Y
после этого выполняем

...

в появившемся окне ставим галку в Pam_p11 в "Rutoken PAM GOST" и нажимаем OK

8 Проверка

Откройте Терминал

Code Block
languagebash
$ sudo login 

введите имя пользователя и в случае если система потребует PIN-код от устройства значит все настроено правильно


9 Блокировка компьютера при извлечении токена

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

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

Для различных дистрибутивов Линукс, команда которая вызывает блокировку учетной записи будет отличаться.

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

        #   Ubuntu         action

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

        # Вызываем функцию блокировки экрана
       
       

# Для

GNOME 

        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";

            # Для XFCE
            # action = "xflock4";

            # Для Astra Linux (FLY)
            # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}



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

...