Files
Bridge-and-Join-s/services/crypto-service/README.md
T
fontvielle 1cf069b55b feat(crypto-service): gRPC-каркас сервиса криптографии (КриптоПро JCP)
- services/crypto-service/proto/crypto.proto — protobuf-контракт VerifyXMLDSig/SignXMLDSig/Health, package ru.zetit.bridgeandjoins.crypto.v1
- services/crypto-service/build.gradle.kts — Gradle Java 21 + protobuf-плагин + shadowJar
- services/crypto-service/src/main/java/.../CryptoServer.java — точка входа на UDS (Netty Epoll)
- services/crypto-service/src/main/java/.../CryptoServiceImpl.java — gRPC-биндинг
- services/crypto-service/src/main/java/.../{Verify,Sign,Health}Handler.java — заглушки операций
- services/crypto-service/src/main/java/.../KeystoreProvider.java — абстракция cryptopro/validata/vipnet/stub
- services/crypto-service/Dockerfile — Liberica JDK 21 → shadowJar → slim
- internal/cryptocli/client.go — Go-клиент по UDS, реализует m2mcore.CryptoVerifier (M1 stub)
- internal/cryptocli/client_test.go — тесты на доступность сокета и ErrNotImplemented
- deploy/docker-compose/docker-compose.yml — добавлен сервис crypto-service с UDS-volume

Реальная криптография КриптоПро JCP подключается после получения
лицензии и jar (положить в services/crypto-service/libs/jcp.jar) и
открытия Maven Central через прокси zetit (для grpc-java/santuario).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 00:58:10 +03:00

3.4 KiB
Raw Blame History

services/crypto-service — крипто-сервис на Java + КриптоПро JCP

gRPC-сервис криптографических операций по ГОСТ Р 34.10-2012:

  • проверка XMLDSig-подписи входящих квитанций НРД, ответов брокеров, заявлений ЛК;
  • серверная подпись действий оператора (admin-ui, SLA 2 мин);
  • резервный канал в НРД через WS ONYX напрямую (когда ИШ не задействован — упаковка и подпись на нашей стороне);
  • криптографические проверки целостности эталонов в MinIO.

Слушает Unix Domain Socket (/run/bj/crypto.sock по умолчанию, переопределяется через BJ_CRYPTO_SOCKET). gRPC по UDS — без сетевого хопа, минимальная задержка.

Стек: Java 21 (Liberica JDK), Apache Santuario с ГОСТ-патчем, КриптоПро JCP. Класс СКЗИ — КС1 (программная защита, без HSM).

Состав

  • proto/crypto.proto — protobuf-контракт: VerifyXMLDSig, SignXMLDSig, Health. Go-package cryptopb, Java-package ru.zetit.bridgeandjoins.crypto.v1.
  • build.gradle.kts — Gradle сборка с протобуф-плагином и shadowJar.
  • src/main/java/.../CryptoServer.java — точка входа, поднимает gRPC на UDS (Netty Epoll). Перед стартом удаляет старый сокет.
  • src/main/java/.../CryptoServiceImpl.java — gRPC-биндинг, делегирует на хендлеры.
  • src/main/java/.../VerifyHandler.java, SignHandler.java, HealthHandler.java — реализации операций (на M1 заглушки).
  • src/main/java/.../KeystoreProvider.java — provider-абстракция (cryptopro | validata | vipnet | stub). Архитектурно сохранена для тиражирования другим компаниям.
  • Dockerfile — Liberica JDK 21 → shadowJar → slim-image, запуск под bj-crypto (uid 1100).

Состояние

На M1 — только скелет. Реальная криптография подключается, когда заказчик предоставит:

  • лицензию и jar КриптоПро JCP (положить в libs/jcp.jar);
  • доступ к Maven Central через прокси zetit для скачивания grpc-java, protobuf-java, Apache Santuario.

После этого VerifyHandler и SignHandler реализуются через Apache Santuario с ГОСТ-патчем (см. TODO в коде).

Запуск (после подключения зависимостей)

./gradlew shadowJar
java -jar build/libs/crypto-service-0.1.0-all.jar

Или в docker-compose:

podman-compose -f deploy/docker-compose/docker-compose.yml up crypto-service

Go-клиент

internal/cryptocli/ — реализация m2mcore.CryptoVerifier по UDS. На M1 проверяет доступность сокета и возвращает ErrNotImplemented (чтобы отличать «сокет недоступен» от «криптография не подключена»).