⭐ Приложение-сервер для работы с Электронно Цифровой Подписью (ЭЦП) РК
- Кроссплатформенный сервер (Windows, Mac OS, Linux)
- HTTP API с JSON-протоколом
- Подпись XML данных с помощью xmldsig
- Подпись WSSE для SmartBridge
- Подпись и верификация PDF (CAdES-T)
- Кодирование и верификация JWT (алгоритм GG2015)
- Поддержка OCSP и CRL (при сетевой недоступности OCSP — автоматический fallback на свежий CRL)
- Проверка валидности сертификатов (включая цепочку доверия)
- Поддержка CMS
- TSP-метки и CAdES-T для CMS / PDF
- Множественные подписи для xmldsig и CMS
- Добавление подписей в уже существующие файлы CMS и XML
- ГОСТ 34.10-2015 (актуальный стандарт НУЦ РК) и новые CRL
- Тестовое покрытие на ключевые кейсы
- Docker
Эта ветка — полная переписка на Kotlin / Spring Boot 4.
- Kotlin 2.3.x, Java 25 (toolchain через foojay-resolver)
- Spring Boot 4.0.x, Gradle 9.5.x
- Jakarta EE (без
javax.*кроме JDK-native) - KalkanCrypt 0.7.5, BouncyCastle 1.84, Apache Santuario 4.0.x, Apache PDFBox 3.0.x
- Тесты: Kotest 5.9 + MockK + Spring Boot Test
В целях оперативного решения проблем / помощи, была создана официальная группа в Telegram: http://t.me/ncanode
Если Вам необходимо реализовать подпись данных формата XML, PDF, JWT или произвольного на стороне сервера, запустите NCANode и обращайтесь к нему по HTTP API.
Исходя из полученных писем от программистов, NCANode используется как в стартапах, так и в крупных страховых компаниях
https://profit.kz/news/56732/Otkritij-kod-Beeline-Hacktoberfest-v-Kazahstane/
Пример запроса (запрос информации о ключе):
{
"xml": "<?xml version=\"1.0\" encoding=\"utf-8\"?><a><b>test</b></a>",
"signers": [
{
"key": "MIIHTwIBAzCCBwkGCSqGS...",
"password": "qwerty12"
}
]
}Пример ответа:
{
"status": 200,
"message": "OK",
"xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?><a><b>test</b><ds:Signature x..."
}Документацию по API можно найти на http://ncanode.kz (актуально для v3; для v4 совпадает большинство эндпоинтов).
Swagger UI поднимается локально по адресу http://localhost:14579/swagger-ui/index.html после запуска.
Проект лицензирован под лицензией MIT
По требованию АО «НИТ» | НУЦ РК. Библиотеки kalkancrypt-*.jar/knca_provider_jce_kalkan-*.jar и kalkancrypt-xmldsig-*.jar
Были удалены из репозитория, поэтому для компиляции Вам необходимо подставить библиотеки
из комплекта разработчика (SDK) в директорию /lib.
- JDK 25 (Gradle сам подгружает toolchain через foojay-resolver, если у вас стоит 21+)
- Gradle wrapper в комплекте (
./gradlew) — версия 9.5
Для сборки проекта необходимо:
- Подставить библиотеки KalkanCrypt (
knca_provider_jce_kalkan-*.jarиkalkancrypt-xmldsig-*.jar) в директориюlib/(Их можно запросить тут) ./gradlew bootJar
Собранный jar будет лежать здесь: build/libs/NCANode-<version>.jar (по умолчанию 4.0.0-SNAPSHOT).
Проект запустить можно командой:
$ ./gradlew bootRundocker volume create ncanode_cache
docker run -p 14579:14579 -v ncanode_cache:/app/cache -d malikzh/ncanodeПредварительно нужно собрать проект через gradle и сгенерировать jar файлы
docker compose build // сборка образа
docker compose up -d // запуск контейнера
docker compose ps // проверка статуса контейнера
docker compose stop // остановка контейнераПроверить можно, перейдя на страницу: http://localhost:14579/actuator/health
Если вы нашли и исправили ошибку, пожалуйста, отправьте Pull Request — я обязательно его рассмотрю.
Если требуется срочное рассмотрение вашего PR, напишите в группу Telegram.
Сделано с ❤️
