Проект KNCA-Signer предназначен для тестирования интеграции с KalkanCrypt и NCALayer - ключевыми компонентами Национального удостоверяющего центра Казахстана (НУЦ). Основное назначение - создание тестовых сертификатов (корневой сертификат, пользовательские и юридические) для демонстрации процесса работы с цифровой подписью XML-документов через NCALayer с последующей верификацией на серверной стороне.
Краткое описание: Проект позволяет выпускать тестовые сертификаты, подписывать XML-документы через NCALayer и проверять подписи на бэкенде с использованием казахстанских криптографических стандартов (GOST 34.10-2015).
Проект состоит из двух основных компонентов:
- Backend (Java 21 + Vert.x): Серверная часть для генерации сертификатов, верификации подписей и предоставления REST API
- Frontend (Alpine.js + Tailwind CSS): Веб-интерфейс для тестирования интеграции с NCALayer через WebSocket
- Интеграция с KalkanCrypt через reflection и MVEL скрипты
- REST API для операций с сертификатами и подписями
- Генерация сертификатов CA, пользователей и юридических лиц
- Валидация XML подписей
- Реактивный интерфейс на Alpine.js
- Поддержка многоязычности (казахский и русский языки)
- WebSocket соединение с NCALayer (wss://127.0.0.1:13579/)
- Гибкие параметры подписи (XML, CMS, raw data)
- Фильтрация подписантов по IIN, BIN, серийному номеру
- Генерация сертификатов: Создание тестовых сертификатов для пользователей и юридических лиц
- Цифровая подпись: Подпись XML-документов через NCALayer с различными параметрами
- Верификация подписей: Проверка подписей на бэкенде с использованием KalkanCrypt
- REST API: Набор endpoints для работы с сертификатами и подписями
- Веб-интерфейс: Удобный интерфейс для тестирования всех функций
- Многоязычная поддержка: Интерфейс на казахском и русском языках
cd backend
./gradlew build
./gradlew runcd frontend
npm install
npm run serveБэкенд запускается на http://localhost:8080, фронтенд - на http://localhost:3000.
Для быстрого запуска приложения с использованием Docker:
# Скачайте образ из GitHub Container Registry
docker pull ghcr.io/gleb619/knca-signer:latest
# Запустите с docker
mkdir -p certs lib && \
# ВАЖНО: Убедитесь, что каталоги принадлежат UID 100:GID 1000 для получения надлежащих разрешений на доступ к папкам
sudo chown -R 100:1000 certs lib && \
echo "WARNING: You must place the corresponding Kalkan cryptographic libraries into ./lib, or the application will not work properly." && \
docker run -d \
--name knca-signer \
-p 8080:8080 \
-v "$(pwd)/certs:/app/certs" \
-v "$(pwd)/lib:/app/lib" \
-e APP_LOGGING_LEVEL=INFO \
--restart unless-stopped \
ghcr.io/gleb619/knca-signer:latestВажно: Для работы криптографических функций необходимо наличие библиотек Kalkan в директории lib/. Без них
приложение будет работать в ограниченном режиме.
Приложение будет доступно на http://localhost:8080.
version: '3.8'
services:
knca-signer:
image: ghcr.io/gleb619/knca-signer:latest
ports:
- "8080:8080"
volumes:
# ВАЖНО: Убедитесь, что каталоги ./certs и ./lib принадлежат UID 100:GID 1000
# Запустите: sudo chown -R 100:1000 ./certs ./lib
# Это соответствует UID/GID пользователя приложения контейнера для получения надлежащих разрешений на запись
- ./certs:/app/certs
- ./lib:/app/lib
environment:
- APP_LOGGING_LEVEL=INFO
restart: unless-stopped
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8080/health" ]
interval: 10s
timeout: 1s
retries: 3
start_period: 10s- Java 21 (для backend)
- Node.js 18+ (для frontend)
- NCALayer установлен и запущен локально
- Kalkan JAR файлы (опционально, для полной функциональности криптографии):
- kalkancrypt-0.7.5.jar
- kalkancrypt_xmldsig-0.4.jar
- knca_provider_util-0.8.6.jar
- Разместить в
backend/lib/
- Backend README - Документация по серверной части
- Frontend README - Документация по веб-интерфейсу
Мы благодарим авторов следующих репозиториев, благодаря помощи которых было создано это приложение:
-
NCALayerJSExample - Пример HTML и JavaScript, показывающий, как вызывать Basics ModuleService NCALayer из браузера: загрузка локального расширения NCALayer, выбор сертификатов, подписание произвольных данных, верификация подписей и обработка ошибок, предоставляя разработчикам готовый стартер для рабочих процессов с e-ID PKI Казахстана.
-
KalkanCryptIssuanceTest - Тесты на базе Maven, которые строит трехуровневую PKI (Root CA → Intermediate CA → End-entity) с использованием ключей GOST 34.10–2015 512-bit, работу с ключами CA в PKCS#12, выпуск и валидацию цепочки сертификатов с KalkanCrypt а также запуск самих модульных тестов для подтверждения корректности выпуска и проверки цепочки.
