Общая информация

Для работы Offline ELM требуется USB-токен. Используется Рутокен ЭЦП 3.х.

Рисунок 29 — Внешний вид USB-токена


Рисунок 30 — Маркировка токена

Для каждой инсталляции сервера Offline ELM требуется отдельный токен. Между серверами, на которых установлен один и тот же бандл Offline ELM, токены взаимозаменяемые. 

Максимально возможный срок действия токена составляет 10 лет. Если вы приобрели более долгосрочное или бессрочное лицензирование для вашего продукта, вам необходимо запланировать заблаговременное обращение в коммерческий отдел для продления токена.

Посмотреть срок действия сертификата на USB-токене можно через CLI или web-интерфейс:

Запуск Offline ELM на виртуальной машине

Для запуска Offline ELM требуется USB-токен. Если вы используете виртуальную машину, то проброс USB-токена осуществляется согласно инструкции вашего гипервизора.

Для взаимодействия с токеном используется сервис pcscd, который запускается в контейнере elm-token. Если на хостовой системе установлен демон pcscd его необходимо полностью отключить, в том числе и автозапуск при перезагрузке. 

Проверка статуса демона pcscd
# service pcscd status
● pcscd.service - PC/SC Smart Card Daemon
     Loaded: loaded (/lib/systemd/system/pcscd.service; indirect; vendor preset: enabled)
     Active: active (running) since Fri 2024-07-26 14:11:30 +07; 1s ago
TriggeredBy: ● pcscd.socket
       Docs: man:pcscd(8)
   Main PID: 1639189 (pcscd)
      Tasks: 5 (limit: 38220)
     Memory: 1.1M
        CPU: 12ms
     CGroup: /system.slice/pcscd.service
             └─1639189 /usr/sbin/pcscd --foreground --auto-exit

июл 26 14:11:30 user-pc systemd[1]: Started PC/SC Smart Card Daemon.
Остановка и отключение демона pcscd
# systemctl stop pcscd.socket       # Останавливаем сервис, если он запущен
# systemctl disable pcscd.socket    # Отключаем автозапуск

Диагностика и решение проблем

Как проверить, что токен пробрасывается?

1. Подключить токен в USB-порт. 

а. Если используется виртуальная машина, пробросить устройство через гипервизор.

2. Выполнить команду "lsusb" для просмотра списка доступных USB-устройств. Если в списке присутствует устройство "Aktiv Rutoken ECP", это означает, что система обнаружила USB-устройство. 

$ lsusb | grep "Aktiv Rutoken ECP"
Bus 001 Device 034: ID 0a89:0030 Aktiv Rutoken ECP

3. Запустить Offline ELM.  

4. В логах контейнера elmi-offline-server найти упоминание USB-токена "Aktiv Rutoken ECP". Если будет следующий вывод, это означает, что Offline ELM корректно обнаружил USB-токен.

$ docker compose logs elmi-offline-server | grep "Aktiv Rutoken ECP" -A 1
elmi-offline-server  | Slot 0 (0x0): Aktiv Rutoken ECP 00 00
elmi-offline-server  |   token label        : ELM token-qsP3SaH5

5. Проверить, что токен доступен в контейнере elmi-offline-server:

$ docker exec -it elmi-offline-server bash -c "pkcs11-tool -L --module /usr/share/elmi-offline/server/lib/librtpkcs11ecp.so | egrep 'token label[[:space:]]*: ELM token' "
  token label        : ELM token-6sBOBu1b

Если Offline ELM не может получить доступ к токену, вы логах будут следующие ошибки.

$ cat log/elmi-server/kernel.log
2025-03-17 13:54:17,479 ERROR o.e.e.s.l.ElmOfflineLib.tokenCheckAndGetSerial (line:293) - Can't open session: CKR_SLOT_ID_INVALID (The specified slot ID is not valid)
2025-03-17 13:54:17,479 ERROR o.e.e.t.o.OfflineCheckTokenThread.proc (line:41) - USB-token check failed! Can't open session: CKR_SLOT_ID_INVALID (The specified slot ID is not valid)

Возможные проблемы

Токен отображается в списке устройств, но ни Offline ELM, ни демон pcscd его не видит

Возможные причины: 

  • Если используется гипервизор, возможно, требуется выбрать другой способ проброса USB-токена в виртуальную машину.
  • Токен проброшен одновременно в несколько виртуальных машин. Одна из них перехватила управление.

Решение: 

  • Ознакомиться с документацией на гипервизор. Попробовать все способы проброса USB-устройств в виртуальную машину.
  • Подключить токен только к одной виртуальной машине. 

Токен отображается в списке устройств, но Offline ELM его не видит

Возможные причины:

  • На хосте установлен демон pcscd. 
  • Какой-то процесс блокирует работу с токеном на данном USB-порту.

Решение:

  • Выполнить остановку демона pcscd. 
  • Остановить процесс, перехватывающий USB-токен. Переставить токен в другой USB-порт.
Остановка и отключение демона pcscd
# systemctl stop pcscd.socket       # Останавливаем сервис, если он запущен
# systemctl disable pcscd.socket    # Отключаем автозапуск

Подключение токена

Offlnie ELM, запущенный в Docker контейнере, должен получить доступ к токену и подключиться к нему  с помощью утилиты от компании Rutoken. Т.к. часто Offline ELM запускается в виртуальной машине, запущенной в гипервизоре, могут возникнуть проблемы проброса токена на каком-либо слое виртуализации. Текущее руководство описывает шаги, которые необходимо выполнить, чтобы убедиться, что токен подключен корректно.

  1. Остановить Offline ELM, если он запущен. Перейти в папку с docker-compose.yml файлами, откуда запускается сервис (примерное имя в зависимости от версии elm-offline-data-x.y-z). Выполнить команду остановки контейнеров.
    docker compose down -v
  2. Отключить проброс токена в вирутальную машину в гипервизоре.
  3. Вытащить и вставить обратно токен в USB порт. Если есть возможность, лучше поменять USB порт, чтобы исключить возможные причины в некорректно работающем USB порту.
  4. Подключить токен в виртуальную машину средствами гипервизора.
  5. Убедиться, что данный порт не подключен ни к какой другой виртуальной машине.
  6.  Проверить состояние демона pcscd. Для взаимодействия с токеном используется сервис pcscd, который запускается в контейнере elm-token. Если на хостовой системе установлен демон pcscd его необходимо полностью отключить, в том числе и автозапуск при перезагрузке. 

     Важно, чтобы и на гипервизоре демон pcscd не был запущен, иначе он может автоматически перехватывать доступ к токену. 

    При использовании USB концентраторов USB over IP демон pcscd тоже может запускаться автоматически на виртуальной машине. Подобное поведение было замечено при использовании коммутатора USB ключей SEH myUTN-800.

    Проверка статуса демона pcscd
    # service pcscd status
    ● pcscd.service - PC/SC Smart Card Daemon
         Loaded: loaded (/lib/systemd/system/pcscd.service; indirect; vendor preset: enabled)
         Active: active (running) since Fri 2024-07-26 14:11:30 +07; 1s ago
    TriggeredBy: ● pcscd.socket
           Docs: man:pcscd(8)
       Main PID: 1639189 (pcscd)
          Tasks: 5 (limit: 38220)
         Memory: 1.1M
            CPU: 12ms
         CGroup: /system.slice/pcscd.service
                 └─1639189 /usr/sbin/pcscd --foreground --auto-exit
    
    июл 26 14:11:30 user-pc systemd[1]: Started PC/SC Smart Card Daemon.
    
    Остановка и отключение демона pcscd
    # systemctl stop pcscd.socket       # Останавливаем сервис, если он запущен
    # systemctl disable pcscd.socket    # Отключаем автозапуск
    
    
    Демон pcscd отключен или отсутствует в системе
    # service pcscd status
    ● pcscd.service - PC/SC Smart Card Daemon
         Loaded: loaded (/lib/systemd/system/pcscd.service; indirect; vendor preset: enabled)
         Active: inactive (dead)
    TriggeredBy: ● pcscd.socket
           Docs: man:pcscd(8)
    PCSCD daemon is not running or is not installed
    
  7. Проверить подключение токена, как USB устройства на хостовую систему
    $ lsusb | grep Rutoken
    Bus 002 Device 002: ID 0a89:0030 Aktiv Rutoken ECP
  8. Запустить Offline ELM. Перейти в папку с docker-compose.yml файлами, откуда запускается сервис (примерное имя в зависимости от версии elm-offline-data-x.y-z). Выполнить команду запуска контейнеров.
    docker compose up -d
  9. Подождать 2 минуты, пока Offline ELM запустится. Проверить проброс токена, как USB устройства, в контейнер.
    $ docker exec -it elm-token sh -c "lsusb | grep '0a89:0030'"
    Bus 002 Device 002: ID 0a89:0030
  10. Проверить возможность подключения к токену из контейнера. Выполнение команды может подвиснуть на несколько секунд, если в этот момент Offline ELM будет работать с токеном.
    docker exec -it elmi-offline-server bash -c "pkcs11-tool -L --module /usr/share/elmi-offline/server/lib/librtpkcs11ecp.so | egrep 'token label[[:space:]]*: ELM token' "
      token label        : ELM token-6sBOBu1b

Если в п.9 команда выводит информацию о наличии данного USB устройства в контейнере, а в п.10 команда ничего не выводит, значит токен проброшен в контейнер как USB устройство, но к нему не удаётся подключиться.  В таком случае, необходимо понять, проблема с подключением к токену из контейнера (это может быть связано с политиками безопасности, настроенными в ОС), либо проблема с подключением к токену актуальна и для хостовой машины, на которой запускается Offline ELM. Дальнейшие шаги описаны в разделе  "Проверка подключения к токену с хостовой машины"

Проверка подключения к токену с хостовой машины

Для анализа проблемы подключения к токену необходимо понять, проблема связана с подключением из контейнера, либо проблема существует и с подключением к токену с непосредственно с виртуальной машины. Для этого необходимо установить несколько утилит и выполнить команды диагностики. Утилиты и примеры команд показаны для Debian подобных систем. 

  1. Установка утилит
    sudo apt install libccid pcscd libpcsclite1 pcsc-tools opensc libengine-pkcs11-openssl wget
  2. Скачивание библиотеки для работы с Rutoken. Библиотеку для конкретной системы можно найти на официальном сайте Rutoken (поддерживаются Fedora/RedHat/Centos/AltLinux/Rosa/РЕД ОС/Debian/Ubuntu/Mint/Astra).
    wget https://download.rutoken.ru/Rutoken/PKCS11Lib/2.17.5.0/Linux/x64/librtpkcs11ecp_2.17.5.0-1_amd64.deb
  3. Установка библиотеки
    sudo apt install ./librtpkcs11ecp_2.17.5.0-1_amd64.deb 
  4. Перезапуск демона pcscd
    sudo systemctl stop pcscd.socket
    sudo systemctl start pcscd.socket 
    sudo systemctl status pcscd.socket
  5. Сбор информации с хоста. Выводы данных команд необходимо предоставить технической поддержке вместе с информацией о версиях ОС и гипервизора.
    lsusb
    pkcs11-tool -LO
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
    pcsc_scan -v # После запуска  pscsc_scan проверяет наличие токена, если токен обнаружен - выводит информацию. Программа не завершает работу сама. Для завершения работы программы нажать Ctrl+C.
    Пример вывода команд
    $ lsusb
    Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd QEMU Tablet
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 002: ID 0a89:0030 Aktiv Rutoken ECP
    
    $ pkcs11-tool -LO
    Available slots:
    Slot 0 (0x0): Aktiv Rutoken ECP 00 00
      (token not recognized)
    Using slot 0 with a present token (0x0)
    
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
    Available slots:
    Slot 0 (0x0): Aktiv Rutoken ECP 00 00
      token label        : ELM token-Bpt0AcV4
      token manufacturer : Aktiv Co.
      token model        : Rutoken ECP
      token flags        : login required, rng, token initialized, PIN initialized
      hardware version   : 65.4
      firmware version   : 30.2
      serial num         : 45376e40
      pin min/max        : 6/32
    
    $ pcsc_scan -v
    PC/SC device scanner
    V 1.6.2 (c) 2001-2022, Ludovic Rousseau <ludovic.rousseau@free.fr>
    Using reader plug'n play mechanism
    Scanning present readers...
    0: Aktiv Rutoken ECP 00 00
     
    Tue Jun  3 11:16:46 2025
     Reader 0: Aktiv Rutoken ECP 00 00
      Event number: 0
      Card state: Card inserted, 
      ATR: 3B 8B 01 52 75 74 6F 6B 65 6E 20 44 53 20 C1
    
    perl: warning: Setting locale failed.
    perl: warning: Please check that your locale settings:
    	LANGUAGE = "en_US:en",
    	LC_ALL = (unset),
    	LC_TIME = "ru_RU.UTF-8",
    	LC_MONETARY = "ru_RU.UTF-8",
    	LC_ADDRESS = "ru_RU.UTF-8",
    	LC_TELEPHONE = "ru_RU.UTF-8",
    	LC_NAME = "ru_RU.UTF-8",
    	LC_MEASUREMENT = "ru_RU.UTF-8",
    	LC_IDENTIFICATION = "ru_RU.UTF-8",
    	LC_NUMERIC = "ru_RU.UTF-8",
    	LC_PAPER = "ru_RU.UTF-8",
    	LANG = "en_US.UTF-8"
        are supported and installed on your system.
    perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
    ATR: 3B 8B 01 52 75 74 6F 6B 65 6E 20 44 53 20 C1
    + TS = 3B --> Direct Convention
    + T0 = 8B, Y(1): 1000, K: 11 (historical bytes)
      TD(1) = 01 --> Y(i+1) = 0000, Protocol T = 1 
    -----
    + Historical bytes: 52 75 74 6F 6B 65 6E 20 44 53 20
      Category indicator byte: 52 (proprietary format)
    + TCK = C1 (correct checksum)
    
    Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
    3B 8B 01 52 75 74 6F 6B 65 6E 20 44 53 20 C1
    	Aktiv Rutoken ECP
    	https://www.rutoken.ru/products/all/rutoken-ecp/


  • No labels