Page tree
Skip to end of metadata
Go to start of metadata





USB-токены и смарт-карты JaCarta, работающие с Astra Linux

JaCarta PKI - сертифицированные USB-токены и смарт-карты с аппаратной реализацией зарубежных криптоалгоритмов, предназначенные для работы с инфраструктурой открытых ключей (PKI).

JaCarta-2 ГОСТ - USB-токены и смарт-карты, предназначенные для использования в качестве сертифицированного средства ЭП (усиленной квалифицированной электронной подписи — УКЭП) и полноценного СКЗИ в системах электронного документооборота (ЭДО), дистанционного банковского обслуживания (ДБО) и др. для обеспечения юридической значимости и неотказуемости действий пользователей, а также для обеспечения целостности и конфиденциальности передаваемых данных.

JaCarta SF/ГОСТ – продукт предназначен для безопасного хранения и транспортировки информации ограниченного доступа (ДСП, государственная тайна) и состоит из:

  • аппаратного средства, выполненного в форм-факторе USB-токена (далее - токен);

  • ПО для ввода в эксплуатацию, управления и администрирования.

Установка программного обеспечения


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

  • ПО из репозиториев Astra Linux:
  • ПО, предоставляемое производителем токена:
    • библиотека libjcPKCS11-2 (пакет jcPKCS11-2);

Для установки пакетов из репозиториев Astra Linux в терминале выполнить команду:

sudo apt install libccid pcscd libpcsclite1 pcsc-tools opensc libengine-pkcs11-openssl1.1

В Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.6 без установленных оперативных обновлений используется пакет libengine-pkcs11-openssl, несовместимый с библиотекой libjcPKCS11-2.so, а пакет  libengine-pkcs11-openssl1.1 отсутствует. Для корректного функционирования токенов следует:

Для установки библиотеки libjcPKCS11-2:

  1. Загрузить файл с пакетомjcPKCS11-2_2.4.0.2946_amd64.deb (или скачать более новую версию пакета с web-сайта Аладдин: https://www.aladdin-rd.ru/support/downloads/jacarta). ;
  2. Установить загруженный пакет:

    sudo dpkg -i jcPKCS11-2_2.4.0.2946_amd64.deb

Проверка работы токена


Для проверки работы токена подключить его к компьютеру.

Проверка с помощью команды pcs_scan

Выполнить команду:

pcsc_scan

Проверка с помощью команды pkcs11-tool

Выполнить команду:

pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -T


Расположение библиотеки libjcPKCS11-2.so раздичается в разных обновлениях ОС

Для того чтобы определить расположение библиотеки libjcPKCS11-2.so выполнить команду:

find /usr/*{lib,lib64} -name libjcPKCS11-2.so


Проверка с помощью графической утилиты XCA

См. XCA: графический интерфейс для работы с токенами


Инициализация токена


Внимание! Инициализация устройства удалит все данные на токене без возможности восстановления. 

Инициализировать токен командой pkcs11-tool:

pkcs11-tool --slot 0x1ffff --init-token --so-pin 00000000 --label 'JaCarta PKI' --module /usr/lib/libjcPKCS11-2.so
Задать PIN-код пользователя командой:
pkcs11-tool --slot 0x1ffff --init-pin --so-pin 00000000 --login --pin 11111111 --module /usr/lib/libjcPKCS11-2.so

Параметры команды pkcs11-tool:

--slot 0x1ffff — указывает в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д;
--init-token – команда инициализации токена;
--pin - PIN-код пользователя JaCarta. По умолчанию имеет значение 11111111;
--so-pin 00000000 – PIN-код администратора JaCarta PKI. По умолчанию имеет значение 00000000;
--label 'JaCarta PKI' - метка (название) токена;
--module - расположение до библиотеки libjcPKCS11-2.so.



Изменение PIN-кода токена


Для изменения PIN-кода токена выполнить команду:

pkcs11-tool --module /usr/lib/libjcPKCS11-2.so --login --pin ваш_старый_пин --change-pin --new-pin ваш_новый_пин
После ввода команды система сообщит, что PIN-код успешно изменен:

Using slot 0 with a present token (0x0)
PIN successfully changed 


Проверка наличия сертификатов и ключевых пар в токене


Чтобы проверить наличие сертификатов и ключевых пар на токене выполнить команду:

 pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -O -l
В результате в окне терминала отобразится информация обо всех сертификатах и ключевых парах, хранящихся на токене:

Using slot 0 with a present token (0x0)


Public Key Object; RSA 2048 bits
  label:      Test
  ID:         45
  Usage:      encrypt, verify, wrap

Certificate Object, type = X.509 cert
  label:  Test
  ID:     45

Если после сообщения

Using slot 0 with a present token (0x0)

 выводится информация о ключах и сертификатах, то из токена можно считать сертификат (см. ниже). Если после указанного сообщения не выводится никаких данных, то устройство пустое. Следует обратиться к администратору или создать ключи и сертификат самостоятельно.

Экспорт сертификата из токена


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

pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -r -y cert  --id <id> > <название_сертификата>.crt
Вместо <id> указать идентификатор (ID), полученный при проверке наличия сертификатов. 

Вместо <название_сертификата>.crt указать имя файла, в который будет экспортирован сертификат.

Генерация ключевой пары


Для генерации ключевой пары выполнить команду:

pkcs11-tool --module /usr/lib/libjcPKCS11-2.so --label "название_ключа" --keypairgen --key-type rsa:2048 -l --id 45

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


Для создания самоподписанного сертификата:

Расположение библиотеки pkcs11.so может отличаться в различных обновлениях ОС. Для того, чтобы определить расположение библиотеки выполнить команду:

find /usr/*{lib,lib64} -name pkcs11.so2
Приведенные ниже команды должны быть неразрывны и выполнены в одной сессии командной оболочки openssl, иначе openssl не сможет обратиться к закрытому ключу.

Номер слота указывается в десятичной системе счисления. Число 131071 в шестнадцатеричной системе = 0x1ffff.

  1. Выполнить команду:

    openssl

    При выполнении команды будет запущена командная оболочка openssl;

  2. В командной оболочке openssl выполнить команду для подключения библиотеки jcPKCS11-2:

    engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1  -pre LOAD -pre MODULE_PATH:/usr/lib/libjcPKCS11-2.so
    $ openssl
    
    OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1  -pre LOAD -pre MODULE_PATH:/usr/lib/libjcPKCS11-2.so
    
    (dynamic) Dynamic engine loading support
    [Success]: SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so
    [Success]: ID:pkcs11
    [Success]: LIST_ADD:1
    [Success]: LOAD
    [Success]: MODULE_PATH:/usr/lib/libjcPKCS11-2.so
    Loaded: (pkcs11) pkcs11 engine
    
  3. В командной оболочке openssl выполнить команду:

    req -engine pkcs11 -new -key 131071:45 -keyform engine -x509 -out название_сертификата.crt -outform DER

    В поле Common Name указать имя пользователя ОС (в примере ниже и далее используется имя Astra-user).

    OpenSSL> req -engine pkcs11 -new -key 131071:45 -keyform engine -x509 -out название_сертификата.crt -outform DER
    engine "pkcs11" set.
    Enter PKCS#11 token PIN for Rutoken ECP <no label>:
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:RU
    State or Province Name (full name) [Some-State]:Moscow
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]: Rusbitech   
    Organizational Unit Name (eg, section) []: Astra
    Common Name (e.g. server FQDN or YOUR name) []:Astra-user
    Email Address []:Astra-user@astralinux.ru
    
  4. Выйти из командной оболочки openssl выполнив команду:

    exit

Загрузка сертификата на токен


Созданный личный сертификат загрузить в JaCarta:

pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -l -y cert -w название_сертификата.crt -a "Имя_сертификата_в_токене" --id 45
Проверить наличие ключей и сертификатов в JaCarta:
pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -O -l

Using slot 0 with a present token (0x0)
Public Key Object; RSA 2048 bits
  label:      название_ключа
  ID:         45
  Usage:      encrypt, verify, wrap
Certificate Object, type = X.509 cert
  label:      имя_сертификата_в_токене
  ID:         45

Локальная аутентификация в Astra Linux с использованием JaCarta


Установка дополнительных пакетов

  1. Открыть Графический менеджер пакетов synaptic;
  2. Через Быстрый фильтр или через поиск найти и отметить к установке следующие пакеты:
    1. libccid;
    2. pcscd;
    3. libpam-p11;
    4. libpam-pkcs11;
    5. libp11-2;
    6. libengine-pkcs11-openssl;
    7. opensc;
  3. Установить выбранные пакеты;

Или выполнить команду:

sudo apt install opensc libengine-pkcs11-openssl libp11-2 libpam-pkcs11 libpam-p11 pcscd libccid

Регистрация сертификата в системе

  1. Конвертировать ранее созданный сертификат в текстовый формат:

    openssl x509 -in название_сертификата.crt -out название_сертификата.pem -inform DER -outform PEM

    где название_сертификата.pem - имя файла сертификата из токена в текстовом формате;

  2. Прочитать с токена сертификат с нужным идентификатором (ID);

  3. Записать полученный сертификат в файл доверенных сертификатов, для чего:

    1. Создать в домашнем каталоге пользователя подкаталог .eid. Для примера используется имя пользователя Astra-user:

      sudo mkdir ~Astra-user/.eid

    2. Назначить созданному подкаталогу права доступа:

      sudo chmod 0755 ~Astra-user/.eid

    3. Добавить в файл .eid/authorized_certificates сертификат (если файл не существует, то он будет создан):

      cat сертификат_из_токена.pem | sudo tee -a ~Astra-user/.eid/authorized_certificates

    4. Установить права доступа на файл:

      sudo chmod 0644 ~/.eid/authorized_certificates

    5. Если пользователю разрешено самому модифицировать свой список доверенных сертификатов, то передать ему владение созданным подкаталогом и файлом:

      sudo chown -R Astra-user:Astra-user ~/.eid


При регистрации нескольких токенов на одном компьютере, необходимо указывать разным пользователям разные идентификаторы сертификатов.

Настройка аутентификации

Для настройки аутентификации:

  1. В файл /usr/share/pam-configs/p11 внести следующую информацию:

    Name: Pam_p11
    Default: yes
    Priority: 800
    Auth-Type: Primary
    Auth: sufficient pam_p11_opensc.so /usr/lib/libjcPKCS11-2.so
  2. Выполнить команду:

    sudo pam-auth-update

  3. В открывшемся окне включить отметку в пункте Pam_p11 (остальные отметки изменять не требуется);

  4. Нажать OK .

Проверка аутентификации по токену


Для проверки аутентификации по токену:

  1. Подключить токен к компьютеру;
  2. Выполнить команду:

    sudo login Astra-user

  3. При выполнении команды вместо пароля пользователя будет запрошен <PIN пользователя>;
  4. После ввода PIN-кода пользователя вход в сессию этого пользователя должен быть выполнен успешно.

Настройка блокировка компьютера при извлечении токена

В состав пакета libpam-pkcs11 входит утилита pkcs11_eventmgr, позволяющая выполнять различные действия при возникновении событий PKCS#11. Конфигурация pkcs11_eventmgr хранится в файле /etc/pam_pkcs11/pkcs11_eventmgr.conf. Пример конфигурации:

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


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

Дополнительные источники информации


https://www.aladdin-rd.ru Веб-сайт содержит большой объем справочной информации об устройствах JaCarta.

https://kbp.aladdin-rd.ru/ База знаний содержит инструкции по решению большинства ошибок, полезные статьи и ответы на часто задаваемые вопросы. Здесь вы можете найти нужную информацию по ключевым словам.

https://www.aladdin-rd.ru/support/downloads Центр Загрузки

1 Comment

  1. понял, отличная статья