Files
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

67 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 в коде).
## Запуск (после подключения зависимостей)
```bash
./gradlew shadowJar
java -jar build/libs/crypto-service-0.1.0-all.jar
```
Или в docker-compose:
```bash
podman-compose -f deploy/docker-compose/docker-compose.yml up crypto-service
```
## Go-клиент
`internal/cryptocli/` — реализация `m2mcore.CryptoVerifier` по UDS.
На M1 проверяет доступность сокета и возвращает `ErrNotImplemented`
(чтобы отличать «сокет недоступен» от «криптография не подключена»).