Общая информация
Для работы 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 его необходимо полностью отключить, в том числе и автозапуск при перезагрузке.
# 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.
# 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-порт.
# systemctl stop pcscd.socket # Останавливаем сервис, если он запущен # systemctl disable pcscd.socket # Отключаем автозапуск
Подключение токена
Offlnie ELM, запущенный в Docker контейнере, должен получить доступ к токену и подключиться к нему с помощью утилиты от компании Rutoken. Т.к. часто Offline ELM запускается в виртуальной машине, запущенной в гипервизоре, могут возникнуть проблемы проброса токена на каком-либо слое виртуализации. Текущее руководство описывает шаги, которые необходимо выполнить, чтобы убедиться, что токен подключен корректно.
- Остановить Offline ELM, если он запущен. Перейти в папку с docker-compose.yml файлами, откуда запускается сервис (примерное имя в зависимости от версии elm-offline-data-x.y-z). Выполнить команду остановки контейнеров.
docker compose down -v
- Отключить проброс токена в вирутальную машину в гипервизоре.
- Вытащить и вставить обратно токен в USB порт. Если есть возможность, лучше поменять USB порт, чтобы исключить возможные причины в некорректно работающем USB порту.
- Подключить токен в виртуальную машину средствами гипервизора.
- Убедиться, что данный порт не подключен ни к какой другой виртуальной машине.
- Проверить состояние демона 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 - Проверить подключение токена, как USB устройства на хостовую систему
$ lsusb | grep Rutoken Bus 002 Device 002: ID 0a89:0030 Aktiv Rutoken ECP
- Запустить Offline ELM. Перейти в папку с docker-compose.yml файлами, откуда запускается сервис (примерное имя в зависимости от версии elm-offline-data-x.y-z). Выполнить команду запуска контейнеров.
docker compose up -d
- Подождать 2 минуты, пока Offline ELM запустится. Проверить проброс токена, как USB устройства, в контейнер.
$ docker exec -it elm-token sh -c "lsusb | grep '0a89:0030'" Bus 002 Device 002: ID 0a89:0030
- Проверить возможность подключения к токену из контейнера. Выполнение команды может подвиснуть на несколько секунд, если в этот момент 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 подобных систем.
- Установка утилит
sudo apt install libccid pcscd libpcsclite1 pcsc-tools opensc libengine-pkcs11-openssl wget
- Скачивание библиотеки для работы с 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
- Установка библиотеки
sudo apt install ./librtpkcs11ecp_2.17.5.0-1_amd64.deb
- Перезапуск демона pcscd
sudo systemctl stop pcscd.socket sudo systemctl start pcscd.socket sudo systemctl status pcscd.socket
- Сбор информации с хоста. Выводы данных команд необходимо предоставить технической поддержке вместе с информацией о версиях ОС и гипервизора.
lsusb pkcs11-tool -LO pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T pcsc_scan -v # После запуска pscsc_scan проверяет наличие токена, если токен обнаружен - выводит информацию. Программа не завершает работу сама. Для завершения работы программы нажать Ctrl+C.