Подготавливает токен перед записью закрытого контейнера и сертификата ключа проверки электронной подписи.
Создать единый интерфейс для форматирования токенов разных производителей. Сократить время на подготовку токена.
Взаимодействие с приложением реализовано через веб‑интерфейс. При форматировании используется официальная консольная утилита производителя Rutoken и библиотека драйвера токена JaCarta т.к. консольная утилита для данного токена отсутствует. Реализовано форматирование для следующих моделей токенов:
- Rutoken S;
- Rutoken lite;
- Rutoken ЭЦП;
- Jakarta PKI.
Для форматирования токенов других моделей или иных производителей необходимо расширить базовый класс Token, реализовав в нём метод format() с логикой форматирования, специфичной для конкретного токена.
Использование официальной консольной утилиты при форматировании Rutoken позволяет задать параметры политики PIN‑кода. Политики PIN‑кода, а также другие настройки, задаются в файле constants.py, расположенном в корне проекта.
Заполнение поля label токена возможно как вручную, так и автоматически — при выборе пользователя. Для этого реализована загрузка данных о пользователях из LDAP. Чтобы сократить время поиска пользователей и количество запросов к LDAP, загруженные данные сохраняются в локальной базе SQLite. Для данного проекта использование SQLite является оптимальным решением. В проекте реализован ORM на базе SQLAlchemy, что при необходимости позволяет легко перейти на другую СУБД.
На текущем этапе веб‑интерфейс выполнен в виде SPA (Single‑Page Application). Планируется доработка приложения для взаимодействия по API с «Центром регистрации» с целью автоматизации выпуска сертификатов и их записи на токен.
- Python 3.12
- Flask 3.1
- PyKCS11
- SQLAlchemy 2.0
- SQLite
- Bootstrap
- JavaScript
- jQuery
- AJAX
Проект запускается на ПК к которому будут подключаться токены для форматирования. Проект разрабатывался и тестировался для работы на ПК, включенном в домен под управлением MS Active Directory, с ОС Windows.
Авторизация при подключении к LDAP серверу настроена на использование билетов kerberos. При работе с ПК подключенного к домену под управлением MS Active Directory и авторизации на ПК под доменной учетной записью, авторизация на LDAP сервере проходит в прозрачном режиме. Также для форматирования токенов Rutoken используются официальные консольные утилиты работающие под ОС Windows. Остальные используемые компоненты кросплатформенные. Для форматирования Runtoken под ОС Linux/macOS необходимо в соответствующих классах (Rutoken, RutokenS, RutokenECP) в методе format() указать логику форматирования как в классе JaCartaLaser, с применением модуля PyKCS11. Для отправки запроса о пользователях к LDAP серверу, при работе на ПК не входящем в домен, необходимо перенастроить авторизацию подключения к LDAP серверу.
Клонируйте репозиторий:
git clone https://github.com/kom-ae/TOKENS.git
Перейдите в директорию TOKENS:
cd TOKENS
Cоздайте и активируйте виртуальное окружение:
# Для Windows:
python -m venv venv
source venv/Scripts/activate
# Для Linux/macOS:
python3 -m venv venv
source venv/bin/activate
Обновите менеджер пакетов pip:
# Для Windows:
python -m pip install --upgrade pip
# Для Linux/macOS:
python3 -m pip install --upgrade pip
Установите зависимости:
pip install -r requirements.txt
Создайте .env файл копированием:
cp .env_example .env
Задайте значения в .env файле, пример:
FLASK_APP=tokens_app
FLASK_DEBUG=0
PIN_ADMIN=44444 # Пин-код администратора устанавливаемый при форматировании
SECRET_KEY=SECRET_KEY
SQLALCHEMY_DATABASE_URI=sqlite:///sqlite.db # Строка для подключения к БД
LDAP_SEARCH_BASE='DC=example,DC=com' # Базовая директория для поиска пользователей на LDAP сервере
Примените миграции:
flask db upgrade
Запустите проект:
flask run
Страница проекта будет доступна по адресу http://127.0.0.1/5000
Автор проекта: Александр Комаров