1cf069b55b
- 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>
79 lines
2.7 KiB
Protocol Buffer
79 lines
2.7 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package bridge_and_joins.crypto.v1;
|
|
|
|
option go_package = "git.zetit.ru/zuevav/Bridge-and-Join-s/internal/cryptocli/cryptopb;cryptopb";
|
|
option java_package = "ru.zetit.bridgeandjoins.crypto.v1";
|
|
option java_multiple_files = true;
|
|
|
|
// CryptoService — серверная криптография по ГОСТ через КриптоПро JCP.
|
|
// Слушает на Unix Domain Socket (по умолчанию /run/bj/crypto.sock).
|
|
service CryptoService {
|
|
// Проверка XMLDSig-подписи (ГОСТ или RSA). Возвращает сведения о
|
|
// подписанте: CN, ИНН (если есть), срок действия сертификата.
|
|
rpc VerifyXMLDSig(VerifyRequest) returns (VerifyResponse);
|
|
|
|
// Подпись XML по ГОСТ — для резервного канала WS ONYX и для
|
|
// серверной подписи действий оператора в admin-ui.
|
|
rpc SignXMLDSig(SignRequest) returns (SignResponse);
|
|
|
|
// Health-check.
|
|
rpc Health(HealthRequest) returns (HealthResponse);
|
|
}
|
|
|
|
message VerifyRequest {
|
|
// Целиком подписанный XML.
|
|
bytes payload = 1;
|
|
|
|
// Профиль ключей и сертификатов: "guest-gost" | "test3-gost" |
|
|
// "prod-gost" | "guest-rsa" | ... — определяет хранилище и trust store.
|
|
string profile = 2;
|
|
}
|
|
|
|
message VerifyResponse {
|
|
// Прошла ли проверка.
|
|
bool valid = 1;
|
|
|
|
// CN из сертификата подписанта.
|
|
string signer_cn = 2;
|
|
|
|
// ИНН из сертификата (если присутствует в OID 1.2.643.3.131.1.1).
|
|
string signer_inn = 3;
|
|
|
|
// Серийный номер сертификата (hex).
|
|
string serial = 4;
|
|
|
|
// Срок действия сертификата (unix epoch, секунды).
|
|
int64 not_before = 5;
|
|
int64 not_after = 6;
|
|
|
|
// Тексты ошибок проверки (если valid=false).
|
|
repeated string errors = 7;
|
|
}
|
|
|
|
message SignRequest {
|
|
// Канонизированный XML, который нужно подписать.
|
|
bytes payload = 1;
|
|
|
|
// Алиас ключа в JCP-keystore.
|
|
string key_alias = 2;
|
|
|
|
// Профиль (тот же что у Verify).
|
|
string profile = 3;
|
|
}
|
|
|
|
message SignResponse {
|
|
// Подписанный XML (с детачированной или встроенной подписью —
|
|
// зависит от профиля).
|
|
bytes signed_xml = 1;
|
|
}
|
|
|
|
message HealthRequest {}
|
|
|
|
message HealthResponse {
|
|
bool ok = 1;
|
|
string version = 2;
|
|
// Активный провайдер криптографии: "cryptopro" | "validata" | "vipnet" | "stub".
|
|
string provider = 3;
|
|
}
|